video-streaminghtml5-videotwiliovp8vp9

"trackPublished" event not firing in twilio-video Javascript SDk


I have the following code:

$.getJSON('/video/getToken', function (data, status) {
    identity = data.identity;
    navigator.mediaDevices.getUserMedia({
        audio: true,
        video: {width: 320, height: 240}
    })
        .then(function (mediaStream) {
            console.log("Obtained " + mediaStream.getTracks() +" from local and joining room" + roomName);
            var connectOptions = {
                name: roomName,
                logLevel: 'off',
                tracks: mediaStream.getTracks(),
                preferredVideoCodecs: ['VP9', 'VP8']
            };
            return Video.connect(data.token, connectOptions);
        })
        .then(roomJoined)
        .catch(function (error) {
            log('Could not connect to Twilio: ' + error.message);
        });
});

function roomJoined(room) {
    const localParticipant = room.localParticipant;
    localParticipant.on('trackPublicationFailed', function(error, localTrack){
        console.log('Failed to publish track %s to room "%s": %s', localTrack,roomName, error.message);
    });

    localParticipant.on('trackPublished', function(localTrackPublication){
        console.log('Succesfully published track %s  with name %s to room "%s"', localTrackPublication.trackSid, localTrackPublication.trackName, roomName);
    });
}

According to the documentation, the "trackPublished" event is fired when a participant publishes media to a room and the "trackPublicationFailed" event is fired when the publication fails. However none of the events seem to fire in my case.

I can verify that the tracks were in fact published to the room and still the "trackPublished" event was not fired.

twilio-video at 1.6.1 Chrome: 63 Ubuntu: 16.04


Solution

  • Twilio developer evangelist here.

    I see you asked this question on GitHub too. Just wanted to add the answer here for posterity:

    Sorry you've run into this. I believe this behavior is by design. Before connect resolves, the SDK may learn about some set of Tracks that successfully published while connecting (for example, the LocalAudioTrack and LocalVideoTrack you publish in your example). These will be available synchronously on the LocalParticipant's trackPublications collection, and so we don't raise the "trackPublished" events for these. We only raise "trackPublished" events for LocalTracks that have not finished publishing during connect or are published after connect, via publishTrack. I see we failed to mention this in our CHANGELOG.md, though. Sorry about that!

    There is an updated code sample on GitHub too.