twilio-video 2.34.0 → 2.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.release.json +1 -2
- package/CHANGELOG.md +11 -0
- package/README.md +9 -10
- package/dist/twilio-video.js +29836 -32994
- package/dist/twilio-video.min.js +2 -23
- package/es5/cancelableroompromise.js +4 -4
- package/es5/cancelableroompromise.js.map +1 -1
- package/es5/connect.js +86 -90
- package/es5/connect.js.map +1 -1
- package/es5/createlocaltrack.js +7 -7
- package/es5/createlocaltrack.js.map +1 -1
- package/es5/createlocaltracks.js +111 -195
- package/es5/createlocaltracks.js.map +1 -1
- package/es5/data/receiver.js +16 -34
- package/es5/data/receiver.js.map +1 -1
- package/es5/data/sender.js +28 -47
- package/es5/data/sender.js.map +1 -1
- package/es5/data/transceiver.js +6 -24
- package/es5/data/transceiver.js.map +1 -1
- package/es5/data/transport.js +18 -37
- package/es5/data/transport.js.map +1 -1
- package/es5/encodingparameters.js +14 -33
- package/es5/encodingparameters.js.map +1 -1
- package/es5/eventemitter.js +2 -2
- package/es5/eventemitter.js.map +1 -1
- package/es5/eventtarget.js +12 -40
- package/es5/eventtarget.js.map +1 -1
- package/es5/index.js +21 -32
- package/es5/index.js.map +1 -1
- package/es5/insights/applicationmonitor.js +16 -18
- package/es5/insights/applicationmonitor.js.map +1 -1
- package/es5/insights/computepressuremonitor.js +33 -79
- package/es5/insights/computepressuremonitor.js.map +1 -1
- package/es5/insights/events/application.js +9 -10
- package/es5/insights/events/application.js.map +1 -1
- package/es5/insights/events/getusermedia.js +9 -10
- package/es5/insights/events/getusermedia.js.map +1 -1
- package/es5/insights/events/network.js +14 -16
- package/es5/insights/events/network.js.map +1 -1
- package/es5/insights/events/peerconnection.js +31 -44
- package/es5/insights/events/peerconnection.js.map +1 -1
- package/es5/insights/events/quality.js +13 -14
- package/es5/insights/events/quality.js.map +1 -1
- package/es5/insights/events/room.js +12 -13
- package/es5/insights/events/room.js.map +1 -1
- package/es5/insights/events/system.js +6 -7
- package/es5/insights/events/system.js.map +1 -1
- package/es5/insights/events/track.js +15 -18
- package/es5/insights/events/track.js.map +1 -1
- package/es5/insights/monitorregistry.js +10 -12
- package/es5/insights/monitorregistry.js.map +1 -1
- package/es5/insights/networkmonitor.js +17 -18
- package/es5/insights/networkmonitor.js.map +1 -1
- package/es5/insights/resourcemonitor.js +15 -17
- package/es5/insights/resourcemonitor.js.map +1 -1
- package/es5/insights/statsmonitor.js +100 -172
- package/es5/insights/statsmonitor.js.map +1 -1
- package/es5/insights/telemetry.js +40 -47
- package/es5/insights/telemetry.js.map +1 -1
- package/es5/localparticipant.js +122 -148
- package/es5/localparticipant.js.map +1 -1
- package/es5/media/track/audiotrack.js +11 -28
- package/es5/media/track/audiotrack.js.map +1 -1
- package/es5/media/track/capturevideoframes.js +21 -37
- package/es5/media/track/capturevideoframes.js.map +1 -1
- package/es5/media/track/es5/localaudiotrack.js +3 -3
- package/es5/media/track/es5/localaudiotrack.js.map +1 -1
- package/es5/media/track/es5/localdatatrack.js +3 -3
- package/es5/media/track/es5/localdatatrack.js.map +1 -1
- package/es5/media/track/es5/localvideotrack.js +3 -3
- package/es5/media/track/es5/localvideotrack.js.map +1 -1
- package/es5/media/track/index.js +17 -36
- package/es5/media/track/index.js.map +1 -1
- package/es5/media/track/localaudiotrack.js +80 -105
- package/es5/media/track/localaudiotrack.js.map +1 -1
- package/es5/media/track/localaudiotrackpublication.js +8 -25
- package/es5/media/track/localaudiotrackpublication.js.map +1 -1
- package/es5/media/track/localdatatrack.js +11 -30
- package/es5/media/track/localdatatrack.js.map +1 -1
- package/es5/media/track/localdatatrackpublication.js +8 -25
- package/es5/media/track/localdatatrackpublication.js.map +1 -1
- package/es5/media/track/localmediatrack.js +104 -129
- package/es5/media/track/localmediatrack.js.map +1 -1
- package/es5/media/track/localtrackpublication.js +24 -82
- package/es5/media/track/localtrackpublication.js.map +1 -1
- package/es5/media/track/localvideotrack.js +87 -112
- package/es5/media/track/localvideotrack.js.map +1 -1
- package/es5/media/track/localvideotrackpublication.js +8 -25
- package/es5/media/track/localvideotrackpublication.js.map +1 -1
- package/es5/media/track/mediatrack.js +71 -95
- package/es5/media/track/mediatrack.js.map +1 -1
- package/es5/media/track/noisecancellationimpl.js +63 -129
- package/es5/media/track/noisecancellationimpl.js.map +1 -1
- package/es5/media/track/receiver.js +5 -22
- package/es5/media/track/receiver.js.map +1 -1
- package/es5/media/track/remoteaudiotrack.js +16 -33
- package/es5/media/track/remoteaudiotrack.js.map +1 -1
- package/es5/media/track/remoteaudiotrackpublication.js +8 -25
- package/es5/media/track/remoteaudiotrackpublication.js.map +1 -1
- package/es5/media/track/remotedatatrack.js +18 -61
- package/es5/media/track/remotedatatrack.js.map +1 -1
- package/es5/media/track/remotedatatrackpublication.js +8 -25
- package/es5/media/track/remotedatatrackpublication.js.map +1 -1
- package/es5/media/track/remotemediatrack.js +36 -80
- package/es5/media/track/remotemediatrack.js.map +1 -1
- package/es5/media/track/remotetrackpublication.js +30 -48
- package/es5/media/track/remotetrackpublication.js.map +1 -1
- package/es5/media/track/remotevideotrack.js +94 -133
- package/es5/media/track/remotevideotrack.js.map +1 -1
- package/es5/media/track/remotevideotrackpublication.js +8 -25
- package/es5/media/track/remotevideotrackpublication.js.map +1 -1
- package/es5/media/track/sender.js +46 -83
- package/es5/media/track/sender.js.map +1 -1
- package/es5/media/track/trackpublication.js +17 -35
- package/es5/media/track/trackpublication.js.map +1 -1
- package/es5/media/track/transceiver.js +12 -30
- package/es5/media/track/transceiver.js.map +1 -1
- package/es5/media/track/videoprocessoreventobserver.js +47 -65
- package/es5/media/track/videoprocessoreventobserver.js.map +1 -1
- package/es5/media/track/videotrack.js +103 -124
- package/es5/media/track/videotrack.js.map +1 -1
- package/es5/networkqualityconfiguration.js +12 -48
- package/es5/networkqualityconfiguration.js.map +1 -1
- package/es5/noisecancellationadapter.js +72 -120
- package/es5/noisecancellationadapter.js.map +1 -1
- package/es5/participant.js +126 -179
- package/es5/participant.js.map +1 -1
- package/es5/preflight/getCombinedConnectionStats.js +44 -95
- package/es5/preflight/getCombinedConnectionStats.js.map +1 -1
- package/es5/preflight/getturncredentials.js +13 -13
- package/es5/preflight/getturncredentials.js.map +1 -1
- package/es5/preflight/makestat.js +4 -29
- package/es5/preflight/makestat.js.map +1 -1
- package/es5/preflight/mos.js +5 -5
- package/es5/preflight/mos.js.map +1 -1
- package/es5/preflight/preflighttest.js +240 -381
- package/es5/preflight/preflighttest.js.map +1 -1
- package/es5/preflight/syntheticaudio.js +8 -8
- package/es5/preflight/syntheticaudio.js.map +1 -1
- package/es5/preflight/syntheticvideo.js +13 -14
- package/es5/preflight/syntheticvideo.js.map +1 -1
- package/es5/preflight/timer.js +9 -10
- package/es5/preflight/timer.js.map +1 -1
- package/es5/queueingeventemitter.js +16 -60
- package/es5/queueingeventemitter.js.map +1 -1
- package/es5/remoteparticipant.js +33 -76
- package/es5/remoteparticipant.js.map +1 -1
- package/es5/room.js +89 -169
- package/es5/room.js.map +1 -1
- package/es5/signaling/index.js +36 -55
- package/es5/signaling/index.js.map +1 -1
- package/es5/signaling/localparticipant.js +18 -37
- package/es5/signaling/localparticipant.js.map +1 -1
- package/es5/signaling/localtrackpublication.js +28 -51
- package/es5/signaling/localtrackpublication.js.map +1 -1
- package/es5/signaling/participant.js +37 -63
- package/es5/signaling/participant.js.map +1 -1
- package/es5/signaling/recording.js +11 -29
- package/es5/signaling/recording.js.map +1 -1
- package/es5/signaling/remoteparticipant.js +6 -24
- package/es5/signaling/remoteparticipant.js.map +1 -1
- package/es5/signaling/remotetrackpublication.js +27 -53
- package/es5/signaling/remotetrackpublication.js.map +1 -1
- package/es5/signaling/room.js +40 -59
- package/es5/signaling/room.js.map +1 -1
- package/es5/signaling/track.js +52 -90
- package/es5/signaling/track.js.map +1 -1
- package/es5/signaling/v2/cancelableroomsignalingpromise.js +46 -46
- package/es5/signaling/v2/cancelableroomsignalingpromise.js.map +1 -1
- package/es5/signaling/v2/dominantspeakersignaling.js +18 -40
- package/es5/signaling/v2/dominantspeakersignaling.js.map +1 -1
- package/es5/signaling/v2/icebox.js +12 -13
- package/es5/signaling/v2/icebox.js.map +1 -1
- package/es5/signaling/v2/iceconnectionmonitor.js +28 -32
- package/es5/signaling/v2/iceconnectionmonitor.js.map +1 -1
- package/es5/signaling/v2/index.js +12 -31
- package/es5/signaling/v2/index.js.map +1 -1
- package/es5/signaling/v2/localparticipant.js +65 -85
- package/es5/signaling/v2/localparticipant.js.map +1 -1
- package/es5/signaling/v2/localtrackpublication.js +21 -39
- package/es5/signaling/v2/localtrackpublication.js.map +1 -1
- package/es5/signaling/v2/mediasignaling.js +25 -48
- package/es5/signaling/v2/mediasignaling.js.map +1 -1
- package/es5/signaling/v2/networkqualitymonitor.js +50 -97
- package/es5/signaling/v2/networkqualitymonitor.js.map +1 -1
- package/es5/signaling/v2/networkqualitysignaling.js +56 -88
- package/es5/signaling/v2/networkqualitysignaling.js.map +1 -1
- package/es5/signaling/v2/peerconnection.js +523 -648
- package/es5/signaling/v2/peerconnection.js.map +1 -1
- package/es5/signaling/v2/peerconnectionmanager.js +111 -167
- package/es5/signaling/v2/peerconnectionmanager.js.map +1 -1
- package/es5/signaling/v2/publisherhintsignaling.js +22 -42
- package/es5/signaling/v2/publisherhintsignaling.js.map +1 -1
- package/es5/signaling/v2/recording.js +8 -26
- package/es5/signaling/v2/recording.js.map +1 -1
- package/es5/signaling/v2/remoteparticipant.js +25 -43
- package/es5/signaling/v2/remoteparticipant.js.map +1 -1
- package/es5/signaling/v2/remotetrackpublication.js +7 -24
- package/es5/signaling/v2/remotetrackpublication.js.map +1 -1
- package/es5/signaling/v2/renderhintssignaling.js +40 -61
- package/es5/signaling/v2/renderhintssignaling.js.map +1 -1
- package/es5/signaling/v2/room.js +216 -280
- package/es5/signaling/v2/room.js.map +1 -1
- package/es5/signaling/v2/trackprioritysignaling.js +11 -29
- package/es5/signaling/v2/trackprioritysignaling.js.map +1 -1
- package/es5/signaling/v2/trackswitchoffsignaling.js +10 -28
- package/es5/signaling/v2/trackswitchoffsignaling.js.map +1 -1
- package/es5/signaling/v2/transcriptionsignaling.js +8 -26
- package/es5/signaling/v2/transcriptionsignaling.js.map +1 -1
- package/es5/signaling/v2/twilioconnectiontransport.js +62 -82
- package/es5/signaling/v2/twilioconnectiontransport.js.map +1 -1
- package/es5/statemachine.js +75 -121
- package/es5/statemachine.js.map +1 -1
- package/es5/stats/average.js +2 -2
- package/es5/stats/average.js.map +1 -1
- package/es5/stats/icereport.js +11 -12
- package/es5/stats/icereport.js.map +1 -1
- package/es5/stats/icereportfactory.js +8 -9
- package/es5/stats/icereportfactory.js.map +1 -1
- package/es5/stats/localaudiotrackstats.js +6 -24
- package/es5/stats/localaudiotrackstats.js.map +1 -1
- package/es5/stats/localtrackstats.js +6 -24
- package/es5/stats/localtrackstats.js.map +1 -1
- package/es5/stats/localvideotrackstats.js +9 -27
- package/es5/stats/localvideotrackstats.js.map +1 -1
- package/es5/stats/networkqualityaudiostats.js +5 -22
- package/es5/stats/networkqualityaudiostats.js.map +1 -1
- package/es5/stats/networkqualitybandwidthstats.js +3 -5
- package/es5/stats/networkqualitybandwidthstats.js.map +1 -1
- package/es5/stats/networkqualityfractionloststats.js +3 -5
- package/es5/stats/networkqualityfractionloststats.js.map +1 -1
- package/es5/stats/networkqualitylatencystats.js +3 -5
- package/es5/stats/networkqualitylatencystats.js.map +1 -1
- package/es5/stats/networkqualitymediastats.js +5 -7
- package/es5/stats/networkqualitymediastats.js.map +1 -1
- package/es5/stats/networkqualityrecvstats.js +5 -22
- package/es5/stats/networkqualityrecvstats.js.map +1 -1
- package/es5/stats/networkqualitysendorrecvstats.js +6 -8
- package/es5/stats/networkqualitysendorrecvstats.js.map +1 -1
- package/es5/stats/networkqualitysendstats.js +5 -22
- package/es5/stats/networkqualitysendstats.js.map +1 -1
- package/es5/stats/networkqualitystats.js +5 -7
- package/es5/stats/networkqualitystats.js.map +1 -1
- package/es5/stats/networkqualityvideostats.js +5 -22
- package/es5/stats/networkqualityvideostats.js.map +1 -1
- package/es5/stats/peerconnectionreport.js +13 -14
- package/es5/stats/peerconnectionreport.js.map +1 -1
- package/es5/stats/peerconnectionreportfactory.js +89 -185
- package/es5/stats/peerconnectionreportfactory.js.map +1 -1
- package/es5/stats/receiverreport.js +28 -46
- package/es5/stats/receiverreport.js.map +1 -1
- package/es5/stats/receiverreportfactory.js +11 -29
- package/es5/stats/receiverreportfactory.js.map +1 -1
- package/es5/stats/remoteaudiotrackstats.js +6 -24
- package/es5/stats/remoteaudiotrackstats.js.map +1 -1
- package/es5/stats/remotetrackstats.js +6 -24
- package/es5/stats/remotetrackstats.js.map +1 -1
- package/es5/stats/remotevideotrackstats.js +7 -25
- package/es5/stats/remotevideotrackstats.js.map +1 -1
- package/es5/stats/senderorreceiverreport.js +3 -4
- package/es5/stats/senderorreceiverreport.js.map +1 -1
- package/es5/stats/senderorreceiverreportfactory.js +3 -4
- package/es5/stats/senderorreceiverreportfactory.js.map +1 -1
- package/es5/stats/senderreport.js +20 -38
- package/es5/stats/senderreport.js.map +1 -1
- package/es5/stats/senderreportfactory.js +11 -29
- package/es5/stats/senderreportfactory.js.map +1 -1
- package/es5/stats/statsreport.js +11 -12
- package/es5/stats/statsreport.js.map +1 -1
- package/es5/stats/sum.js +1 -1
- package/es5/stats/sum.js.map +1 -1
- package/es5/stats/trackstats.js +3 -4
- package/es5/stats/trackstats.js.map +1 -1
- package/es5/transceiver.js +8 -26
- package/es5/transceiver.js.map +1 -1
- package/es5/twilioconnection.js +166 -223
- package/es5/twilioconnection.js.map +1 -1
- package/es5/util/asyncvar.js +12 -14
- package/es5/util/asyncvar.js.map +1 -1
- package/es5/util/backoff.js +14 -16
- package/es5/util/backoff.js.map +1 -1
- package/es5/util/browserdetection.js +19 -35
- package/es5/util/browserdetection.js.map +1 -1
- package/es5/util/cancelablepromise.js +30 -57
- package/es5/util/cancelablepromise.js.map +1 -1
- package/es5/util/constants.js +13 -13
- package/es5/util/constants.js.map +1 -1
- package/es5/util/detectsilentaudio.js +10 -10
- package/es5/util/detectsilentaudio.js.map +1 -1
- package/es5/util/detectsilentvideo.js +12 -12
- package/es5/util/detectsilentvideo.js.map +1 -1
- package/es5/util/documentvisibilitymonitor.js +34 -41
- package/es5/util/documentvisibilitymonitor.js.map +1 -1
- package/es5/util/dynamicimport.js +4 -4
- package/es5/util/dynamicimport.js.map +1 -1
- package/es5/util/eventobserver.js +19 -39
- package/es5/util/eventobserver.js.map +1 -1
- package/es5/util/filter.js +11 -12
- package/es5/util/filter.js.map +1 -1
- package/es5/util/index.js +96 -165
- package/es5/util/index.js.map +1 -1
- package/es5/util/insightspublisher/index.js +48 -78
- package/es5/util/insightspublisher/index.js.map +1 -1
- package/es5/util/insightspublisher/null.js +9 -10
- package/es5/util/insightspublisher/null.js.map +1 -1
- package/es5/util/localmediarestartdeferreds.js +10 -11
- package/es5/util/localmediarestartdeferreds.js.map +1 -1
- package/es5/util/log.js +44 -70
- package/es5/util/log.js.map +1 -1
- package/es5/util/movingaveragedelta.js +12 -13
- package/es5/util/movingaveragedelta.js.map +1 -1
- package/es5/util/networkmonitor.js +26 -30
- package/es5/util/networkmonitor.js.map +1 -1
- package/es5/util/nullobserver.js +22 -48
- package/es5/util/nullobserver.js.map +1 -1
- package/es5/util/sdp/index.js +109 -134
- package/es5/util/sdp/index.js.map +1 -1
- package/es5/util/sdp/issue8329.js +56 -57
- package/es5/util/sdp/issue8329.js.map +1 -1
- package/es5/util/sdp/simulcast.js +55 -73
- package/es5/util/sdp/simulcast.js.map +1 -1
- package/es5/util/sdp/trackmatcher.js +14 -15
- package/es5/util/sdp/trackmatcher.js.map +1 -1
- package/es5/util/sid.js +5 -5
- package/es5/util/sid.js.map +1 -1
- package/es5/util/support.js +13 -16
- package/es5/util/support.js.map +1 -1
- package/es5/util/timeout.js +28 -39
- package/es5/util/timeout.js.map +1 -1
- package/es5/util/timeoutpromise.js +38 -84
- package/es5/util/timeoutpromise.js.map +1 -1
- package/es5/util/twilio-video-errors.js +277 -457
- package/es5/util/twilio-video-errors.js.map +1 -1
- package/es5/util/twilioerror.js +13 -57
- package/es5/util/twilioerror.js.map +1 -1
- package/es5/util/twiliowarning.js +1 -1
- package/es5/util/twiliowarning.js.map +1 -1
- package/es5/util/validate.js +13 -15
- package/es5/util/validate.js.map +1 -1
- package/es5/vendor/inherits.js +3 -5
- package/es5/vendor/inherits.js.map +1 -1
- package/es5/webaudio/audiocontext.js +8 -9
- package/es5/webaudio/audiocontext.js.map +1 -1
- package/es5/webaudio/detectsilence.js +9 -9
- package/es5/webaudio/detectsilence.js.map +1 -1
- package/es5/webaudio/workaround180748.js +15 -13
- package/es5/webaudio/workaround180748.js.map +1 -1
- package/es5/webrtc/getstats.js +242 -448
- package/es5/webrtc/getstats.js.map +1 -1
- package/es5/webrtc/getusermedia.js +1 -2
- package/es5/webrtc/getusermedia.js.map +1 -1
- package/es5/webrtc/index.js +1 -17
- package/es5/webrtc/index.js.map +1 -1
- package/es5/webrtc/rtcpeerconnection/chrome.js +102 -295
- package/es5/webrtc/rtcpeerconnection/chrome.js.map +1 -1
- package/es5/webrtc/rtcpeerconnection/firefox.js +69 -146
- package/es5/webrtc/rtcpeerconnection/firefox.js.map +1 -1
- package/es5/webrtc/rtcpeerconnection/index.js +1 -1
- package/es5/webrtc/rtcpeerconnection/index.js.map +1 -1
- package/es5/webrtc/rtcpeerconnection/safari.js +110 -192
- package/es5/webrtc/rtcpeerconnection/safari.js.map +1 -1
- package/es5/webrtc/rtcrtpsender.js +3 -4
- package/es5/webrtc/rtcrtpsender.js.map +1 -1
- package/es5/webrtc/util/index.js +28 -63
- package/es5/webrtc/util/index.js.map +1 -1
- package/es5/webrtc/util/latch.js +21 -28
- package/es5/webrtc/util/latch.js.map +1 -1
- package/es5/webrtc/util/sdp.js +41 -211
- package/es5/webrtc/util/sdp.js.map +1 -1
- package/lib/connect.js +0 -1
- package/lib/createlocaltracks.ts +2 -2
- package/lib/localparticipant.js +0 -1
- package/lib/media/track/mediatrack.js +0 -2
- package/lib/media/track/noisecancellationimpl.ts +2 -2
- package/lib/noisecancellationadapter.ts +2 -2
- package/lib/preflight/getCombinedConnectionStats.ts +1 -1
- package/lib/preflight/getturncredentials.ts +2 -2
- package/lib/preflight/preflighttest.ts +3 -3
- package/lib/signaling/v2/peerconnection.js +2 -4
- package/lib/util/sdp/index.js +1 -2
- package/lib/util/sdp/issue8329.js +0 -2
- package/lib/util/support.js +4 -7
- package/lib/webrtc/getstats.js +6 -21
- package/lib/webrtc/index.js +0 -16
- package/lib/webrtc/rtcpeerconnection/chrome.js +13 -123
- package/lib/webrtc/rtcpeerconnection/firefox.js +5 -6
- package/lib/webrtc/rtcpeerconnection/safari.js +9 -19
- package/lib/webrtc/util/sdp.js +13 -194
- package/package.json +16 -11
- package/rollup.config.mjs +85 -0
- package/tsconfig.json +5 -5
- package/es5/webrtc/mediastream.js +0 -11
- package/es5/webrtc/mediastream.js.map +0 -1
- package/es5/webrtc/mediastreamtrack.js +0 -11
- package/es5/webrtc/mediastreamtrack.js.map +0 -1
- package/es5/webrtc/rtcicecandidate.js +0 -11
- package/es5/webrtc/rtcicecandidate.js.map +0 -1
- package/es5/webrtc/rtcsessiondescription/chrome.js +0 -43
- package/es5/webrtc/rtcsessiondescription/chrome.js.map +0 -1
- package/es5/webrtc/rtcsessiondescription/firefox.js +0 -4
- package/es5/webrtc/rtcsessiondescription/firefox.js.map +0 -1
- package/es5/webrtc/rtcsessiondescription/index.js +0 -22
- package/es5/webrtc/rtcsessiondescription/index.js.map +0 -1
- package/lib/webrtc/mediastream.js +0 -10
- package/lib/webrtc/mediastreamtrack.js +0 -10
- package/lib/webrtc/rtcicecandidate.js +0 -10
- package/lib/webrtc/rtcsessiondescription/chrome.js +0 -39
- package/lib/webrtc/rtcsessiondescription/firefox.js +0 -4
- package/lib/webrtc/rtcsessiondescription/index.js +0 -21
- package/src/twilio-video.js +0 -16
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
3
|
-
var _a = require('./'), createPtToCodecName = _a.createPtToCodecName, getMediaSections = _a.getMediaSections;
|
|
2
|
+
const { createPtToCodecName, getMediaSections } = require('./');
|
|
4
3
|
/**
|
|
5
4
|
* An RTX payload type
|
|
6
5
|
* @typedef {PT} RtxPT
|
|
@@ -19,7 +18,7 @@ var _a = require('./'), createPtToCodecName = _a.createPtToCodecName, getMediaSe
|
|
|
19
18
|
* @returns {RTCSessionDescription} newDescription
|
|
20
19
|
*/
|
|
21
20
|
function workaround(description) {
|
|
22
|
-
|
|
21
|
+
const descriptionInit = { type: description.type };
|
|
23
22
|
if (description.type !== 'rollback') {
|
|
24
23
|
descriptionInit.sdp = sdpWorkaround(description.sdp);
|
|
25
24
|
}
|
|
@@ -30,8 +29,8 @@ function workaround(description) {
|
|
|
30
29
|
* @returns {string} newSdp
|
|
31
30
|
*/
|
|
32
31
|
function sdpWorkaround(sdp) {
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
const mediaSections = getMediaSections(sdp);
|
|
33
|
+
const session = sdp.split('\r\nm=')[0];
|
|
35
34
|
return [session]
|
|
36
35
|
.concat(mediaSections.map(mediaSectionWorkaround))
|
|
37
36
|
.join('\r\n');
|
|
@@ -41,31 +40,31 @@ function sdpWorkaround(sdp) {
|
|
|
41
40
|
* @returns {string} newMediaSection
|
|
42
41
|
*/
|
|
43
42
|
function mediaSectionWorkaround(mediaSection) {
|
|
44
|
-
|
|
43
|
+
const ptToCodecName = createPtToCodecName(mediaSection);
|
|
45
44
|
mediaSection = deleteDuplicateRtxPts(mediaSection, ptToCodecName);
|
|
46
45
|
mediaSection = resolvePayloadTypeConflicts(mediaSection);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
const codecNameToPts = createCodecNameToPts(ptToCodecName);
|
|
47
|
+
const rtxPts = codecNameToPts.get('rtx') || new Set();
|
|
48
|
+
const invalidRtxPts = new Set();
|
|
49
|
+
const rtxPtToAssociatedPt = createRtxPtToAssociatedPt(mediaSection, ptToCodecName, rtxPts, invalidRtxPts);
|
|
50
|
+
const associatedPtToRtxPt = createAssociatedPtToRtxPt(rtxPtToAssociatedPt, invalidRtxPts);
|
|
51
|
+
const unassociatedRtxPts = Array.from(invalidRtxPts);
|
|
53
52
|
// NOTE(mroberts): We normalize to lowercase.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return Array.from(pts).reduce(
|
|
53
|
+
const knownCodecNames = ['h264', 'vp8', 'vp9'];
|
|
54
|
+
const unassociatedPts = knownCodecNames.reduce((unassociatedPts, codecName) => {
|
|
55
|
+
const pts = codecNameToPts.get(codecName) || new Set();
|
|
56
|
+
return Array.from(pts).reduce((unassociatedPts, pt) => associatedPtToRtxPt.has(pt)
|
|
58
57
|
? unassociatedPts
|
|
59
|
-
: unassociatedPts.add(pt)
|
|
58
|
+
: unassociatedPts.add(pt), unassociatedPts);
|
|
60
59
|
}, new Set());
|
|
61
|
-
unassociatedPts.forEach(
|
|
60
|
+
unassociatedPts.forEach(pt => {
|
|
62
61
|
if (unassociatedRtxPts.length) {
|
|
63
|
-
|
|
62
|
+
const rtxPt = unassociatedRtxPts.shift();
|
|
64
63
|
mediaSection = deleteFmtpAttributesForRtxPt(mediaSection, rtxPt);
|
|
65
64
|
mediaSection = addFmtpAttributeForRtxPt(mediaSection, rtxPt, pt);
|
|
66
65
|
}
|
|
67
66
|
});
|
|
68
|
-
unassociatedRtxPts.forEach(
|
|
67
|
+
unassociatedRtxPts.forEach(rtxPt => {
|
|
69
68
|
mediaSection = deleteFmtpAttributesForRtxPt(mediaSection, rtxPt);
|
|
70
69
|
mediaSection = deleteRtpmapAttributesForRtxPt(mediaSection, rtxPt);
|
|
71
70
|
});
|
|
@@ -77,26 +76,26 @@ function mediaSectionWorkaround(mediaSection) {
|
|
|
77
76
|
* @returns {string} resolvedMediaSection
|
|
78
77
|
*/
|
|
79
78
|
function resolvePayloadTypeConflicts(mediaSection) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
for (
|
|
84
|
-
|
|
79
|
+
const lines = mediaSection.split('\r\n');
|
|
80
|
+
const seenPts = new Map(); // PT -> first codec seen
|
|
81
|
+
let nextAvailablePt = 96; // Start from 96, which is the first dynamic PT. See https://datatracker.ietf.org/doc/html/rfc3551#section-3
|
|
82
|
+
for (let i = 0; i < lines.length; i++) {
|
|
83
|
+
const rtpmapMatch = lines[i].match(/^a=rtpmap:(\d+) ([^/]+)/);
|
|
85
84
|
if (rtpmapMatch) {
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
const pt = parseInt(rtpmapMatch[1], 10);
|
|
86
|
+
const codec = rtpmapMatch[2].toLowerCase();
|
|
88
87
|
if (seenPts.has(pt) && seenPts.get(pt) !== codec) {
|
|
89
88
|
// Conflict detected - reassign this PT
|
|
90
89
|
while (seenPts.has(nextAvailablePt) || nextAvailablePt === pt) {
|
|
91
90
|
nextAvailablePt++;
|
|
92
91
|
}
|
|
93
|
-
|
|
92
|
+
const newPt = nextAvailablePt;
|
|
94
93
|
seenPts.set(newPt, codec);
|
|
95
|
-
lines[i] = lines[i].replace(
|
|
96
|
-
for (
|
|
94
|
+
lines[i] = lines[i].replace(`a=rtpmap:${pt}`, `a=rtpmap:${newPt}`);
|
|
95
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
97
96
|
// eslint-disable-next-line max-depth
|
|
98
|
-
if (lines[j].match(new RegExp(
|
|
99
|
-
lines[j] = lines[j].replace(new RegExp(
|
|
97
|
+
if (lines[j].match(new RegExp(`^a=(fmtp|rtcp-fb):${pt}\\b`))) {
|
|
98
|
+
lines[j] = lines[j].replace(new RegExp(`^a=(fmtp|rtcp-fb):${pt}\\b`), `a=$1:${newPt}`);
|
|
100
99
|
}
|
|
101
100
|
}
|
|
102
101
|
}
|
|
@@ -117,11 +116,11 @@ function deleteDuplicateRtxPts(mediaSection, ptToCodecName) {
|
|
|
117
116
|
// with duplicate "rtx" payload mapping in media section. When applied,
|
|
118
117
|
// Chrome rejects the SDP. We workaround this by deleting duplicate
|
|
119
118
|
// "rtx" mappings found in SDP.
|
|
120
|
-
return Array.from(ptToCodecName.keys()).reduce(
|
|
121
|
-
|
|
122
|
-
return (section.match(rtpmapRegex) || []).slice(ptToCodecName.get(pt) === 'rtx' ? 1 : 0).reduce(
|
|
123
|
-
|
|
124
|
-
|
|
119
|
+
return Array.from(ptToCodecName.keys()).reduce((section, pt) => {
|
|
120
|
+
const rtpmapRegex = new RegExp(`^a=rtpmap:${pt} rtx.+$`, 'gm');
|
|
121
|
+
return (section.match(rtpmapRegex) || []).slice(ptToCodecName.get(pt) === 'rtx' ? 1 : 0).reduce((section, rtpmap) => {
|
|
122
|
+
const rtpmapRegex = new RegExp(`\r\n${rtpmap}`);
|
|
123
|
+
const fmtpmapRegex = new RegExp(`\r\na=fmtp:${pt} apt=[0-9]+`);
|
|
125
124
|
return section.replace(rtpmapRegex, '').replace(fmtpmapRegex, '');
|
|
126
125
|
}, section);
|
|
127
126
|
}, mediaSection);
|
|
@@ -131,9 +130,9 @@ function deleteDuplicateRtxPts(mediaSection, ptToCodecName) {
|
|
|
131
130
|
* @returns {Map<string, NonEmptySet<PT>>} codecNameToPts
|
|
132
131
|
*/
|
|
133
132
|
function createCodecNameToPts(ptToCodecName) {
|
|
134
|
-
|
|
135
|
-
ptToCodecName.forEach(
|
|
136
|
-
|
|
133
|
+
const codecNameToPts = new Map();
|
|
134
|
+
ptToCodecName.forEach((codecName, pt) => {
|
|
135
|
+
const pts = codecNameToPts.get(codecName) || new Set();
|
|
137
136
|
return codecNameToPts.set(codecName, pts.add(pt));
|
|
138
137
|
});
|
|
139
138
|
return codecNameToPts;
|
|
@@ -146,20 +145,20 @@ function createCodecNameToPts(ptToCodecName) {
|
|
|
146
145
|
* @returns {Map<RtxPT, NonRtxPT>} rtxPtToAssociatedPt
|
|
147
146
|
*/
|
|
148
147
|
function createRtxPtToAssociatedPt(mediaSection, ptToCodecName, rtxPts, invalidRtxPts) {
|
|
149
|
-
return Array.from(rtxPts).reduce(
|
|
150
|
-
|
|
151
|
-
|
|
148
|
+
return Array.from(rtxPts).reduce((rtxPtToAssociatedPt, rtxPt) => {
|
|
149
|
+
const fmtpPattern = new RegExp(`a=fmtp:${rtxPt} apt=(\\d+)`);
|
|
150
|
+
const matches = mediaSection.match(fmtpPattern);
|
|
152
151
|
if (!matches) {
|
|
153
152
|
invalidRtxPts.add(rtxPt);
|
|
154
153
|
return rtxPtToAssociatedPt;
|
|
155
154
|
}
|
|
156
|
-
|
|
155
|
+
const pt = Number.parseInt(matches[1]);
|
|
157
156
|
if (!ptToCodecName.has(pt)) {
|
|
158
157
|
// This is Issue 8329.
|
|
159
158
|
invalidRtxPts.add(rtxPt);
|
|
160
159
|
return rtxPtToAssociatedPt;
|
|
161
160
|
}
|
|
162
|
-
|
|
161
|
+
const codecName = ptToCodecName.get(pt);
|
|
163
162
|
if (codecName === 'rtx') {
|
|
164
163
|
// Strange
|
|
165
164
|
invalidRtxPts.add(rtxPt);
|
|
@@ -176,19 +175,19 @@ function createRtxPtToAssociatedPt(mediaSection, ptToCodecName, rtxPts, invalidR
|
|
|
176
175
|
*/
|
|
177
176
|
function createAssociatedPtToRtxPt(rtxPtToAssociatedPt, invalidRtxPts) {
|
|
178
177
|
// First, we construct a Map<NonRtxPT, NonEmptySet<RtxPT>>.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
178
|
+
const associatedPtToRtxPts = Array.from(rtxPtToAssociatedPt).reduce((associatedPtToRtxPts, pair) => {
|
|
179
|
+
const rtxPt = pair[0];
|
|
180
|
+
const pt = pair[1];
|
|
181
|
+
const rtxPts = associatedPtToRtxPts.get(pt) || new Set();
|
|
183
182
|
return associatedPtToRtxPts.set(pt, rtxPts.add(rtxPt));
|
|
184
183
|
}, new Map());
|
|
185
184
|
// Then, we filter down to a Map<NonRtxPT, RtxPt>. Any RtxPTs that map to the
|
|
186
185
|
// same NonRtxPT are removed and added to invalidRtxPts.
|
|
187
|
-
return Array.from(associatedPtToRtxPts).reduce(
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
return Array.from(associatedPtToRtxPts).reduce((associatedPtToRtxPt, pair) => {
|
|
187
|
+
const pt = pair[0];
|
|
188
|
+
const rtxPts = Array.from(pair[1]);
|
|
190
189
|
if (rtxPts.length > 1) {
|
|
191
|
-
rtxPts.forEach(
|
|
190
|
+
rtxPts.forEach(rtxPt => {
|
|
192
191
|
invalidRtxPts.add(rtxPt);
|
|
193
192
|
});
|
|
194
193
|
return associatedPtToRtxPt;
|
|
@@ -202,7 +201,7 @@ function createAssociatedPtToRtxPt(rtxPtToAssociatedPt, invalidRtxPts) {
|
|
|
202
201
|
* @returns {string} newMediaSection
|
|
203
202
|
*/
|
|
204
203
|
function deleteFmtpAttributesForRtxPt(mediaSection, rtxPt) {
|
|
205
|
-
|
|
204
|
+
const pattern = new RegExp(`a=fmtp:${rtxPt}.*\r\n`, 'gm');
|
|
206
205
|
return mediaSection.replace(pattern, '');
|
|
207
206
|
}
|
|
208
207
|
/**
|
|
@@ -211,7 +210,7 @@ function deleteFmtpAttributesForRtxPt(mediaSection, rtxPt) {
|
|
|
211
210
|
* @returns {string} newMediaSection
|
|
212
211
|
*/
|
|
213
212
|
function deleteRtpmapAttributesForRtxPt(mediaSection, rtxPt) {
|
|
214
|
-
|
|
213
|
+
const pattern = new RegExp(`a=rtpmap:${rtxPt}.*\r\n`, 'gm');
|
|
215
214
|
return mediaSection.replace(pattern, '');
|
|
216
215
|
}
|
|
217
216
|
/**
|
|
@@ -222,8 +221,8 @@ function deleteRtpmapAttributesForRtxPt(mediaSection, rtxPt) {
|
|
|
222
221
|
*/
|
|
223
222
|
function addFmtpAttributeForRtxPt(mediaSection, rtxPt, pt) {
|
|
224
223
|
return mediaSection.endsWith('\r\n')
|
|
225
|
-
?
|
|
226
|
-
:
|
|
224
|
+
? `${mediaSection}a=fmtp:${rtxPt} apt=${pt}\r\n`
|
|
225
|
+
: `${mediaSection}\r\na=fmtp:${rtxPt} apt=${pt}`;
|
|
227
226
|
}
|
|
228
227
|
module.exports = workaround;
|
|
229
228
|
//# sourceMappingURL=issue8329.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue8329.js","sourceRoot":"","sources":["../../../lib/util/sdp/issue8329.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"issue8329.js","sourceRoot":"","sources":["../../../lib/util/sdp/issue8329.js"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
3
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
-
if (!m) return o;
|
|
5
|
-
var i = m.call(o), r, ar = [], e;
|
|
6
|
-
try {
|
|
7
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
-
}
|
|
9
|
-
catch (error) { e = { error: error }; }
|
|
10
|
-
finally {
|
|
11
|
-
try {
|
|
12
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
-
}
|
|
14
|
-
finally { if (e) throw e.error; }
|
|
15
|
-
}
|
|
16
|
-
return ar;
|
|
17
|
-
};
|
|
18
|
-
var _a = require('../'), difference = _a.difference, flatMap = _a.flatMap;
|
|
2
|
+
const { difference, flatMap } = require('../');
|
|
19
3
|
/**
|
|
20
4
|
* Create a random {@link SSRC}.
|
|
21
5
|
* @returns {SSRC}
|
|
22
6
|
*/
|
|
23
7
|
function createSSRC() {
|
|
24
|
-
|
|
8
|
+
const ssrcMax = 0xffffffff;
|
|
25
9
|
return String(Math.floor(Math.random() * ssrcMax));
|
|
26
10
|
}
|
|
27
11
|
/**
|
|
@@ -32,14 +16,14 @@ function createSSRC() {
|
|
|
32
16
|
* @property {string} streamId
|
|
33
17
|
* @property {Track.ID} trackId
|
|
34
18
|
*/
|
|
35
|
-
|
|
19
|
+
class TrackAttributes {
|
|
36
20
|
/**
|
|
37
21
|
* Construct a {@link MediaStreamTrack} attribute store.
|
|
38
22
|
* @param {Track.ID} trackId - The MediaStreamTrack ID
|
|
39
23
|
* @param {MediaStreamID} streamId - The MediaStream ID
|
|
40
24
|
* @param {string} cName - The MediaStream cname
|
|
41
25
|
*/
|
|
42
|
-
|
|
26
|
+
constructor(trackId, streamId, cName) {
|
|
43
27
|
Object.defineProperties(this, {
|
|
44
28
|
cName: {
|
|
45
29
|
enumerable: true,
|
|
@@ -72,11 +56,11 @@ var TrackAttributes = /** @class */ (function () {
|
|
|
72
56
|
* Add {@link SimSSRC}s to the {@link TrackAttributes}.
|
|
73
57
|
* @returns {void}
|
|
74
58
|
*/
|
|
75
|
-
|
|
59
|
+
addSimulcastSSRCs() {
|
|
76
60
|
if (this.isSimulcastEnabled) {
|
|
77
61
|
return;
|
|
78
62
|
}
|
|
79
|
-
|
|
63
|
+
const simulcastSSRCs = [createSSRC(), createSSRC()];
|
|
80
64
|
simulcastSSRCs.forEach(function (ssrc) {
|
|
81
65
|
this.primarySSRCs.add(ssrc);
|
|
82
66
|
}, this);
|
|
@@ -85,7 +69,7 @@ var TrackAttributes = /** @class */ (function () {
|
|
|
85
69
|
this.rtxPairs.set(createSSRC(), ssrc);
|
|
86
70
|
}, this);
|
|
87
71
|
}
|
|
88
|
-
}
|
|
72
|
+
}
|
|
89
73
|
/**
|
|
90
74
|
* Add the given {@link PrimarySSRC} or {@link RtxSSRC} to the {@link TrackAttributes}
|
|
91
75
|
* and update the "isSimulcastEnabled" flag if it is also a {@link SimSSRC}.
|
|
@@ -96,7 +80,7 @@ var TrackAttributes = /** @class */ (function () {
|
|
|
96
80
|
* {@link SimSSRC}; false otherwise
|
|
97
81
|
* @returns {void}
|
|
98
82
|
*/
|
|
99
|
-
|
|
83
|
+
addSSRC(ssrc, primarySSRC, isSimSSRC) {
|
|
100
84
|
if (primarySSRC) {
|
|
101
85
|
this.rtxPairs.set(ssrc, primarySSRC);
|
|
102
86
|
}
|
|
@@ -104,31 +88,29 @@ var TrackAttributes = /** @class */ (function () {
|
|
|
104
88
|
this.primarySSRCs.add(ssrc);
|
|
105
89
|
}
|
|
106
90
|
this.isSimulcastEnabled = this.isSimulcastEnabled || isSimSSRC;
|
|
107
|
-
}
|
|
91
|
+
}
|
|
108
92
|
/**
|
|
109
93
|
* Construct the SDP lines for the {@link TrackAttributes}.
|
|
110
94
|
* @param {boolean} [excludeRtx=false]
|
|
111
95
|
* @returns {Array<string>} Array of SDP lines
|
|
112
96
|
*/
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
var rtxPairs = excludeRtx
|
|
97
|
+
toSdpLines(excludeRtx) {
|
|
98
|
+
const rtxPairs = excludeRtx
|
|
116
99
|
? []
|
|
117
|
-
: Array.from(this.rtxPairs.entries()).map(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
]
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
100
|
+
: Array.from(this.rtxPairs.entries()).map(rtxPair => rtxPair.reverse());
|
|
101
|
+
const simSSRCs = Array.from(this.primarySSRCs.values());
|
|
102
|
+
const ssrcs = rtxPairs.length ? flatMap(rtxPairs) : simSSRCs;
|
|
103
|
+
const attrLines = flatMap(ssrcs, ssrc => [
|
|
104
|
+
`a=ssrc:${ssrc} cname:${this.cName}`,
|
|
105
|
+
`a=ssrc:${ssrc} msid:${this.streamId} ${this.trackId}`
|
|
106
|
+
]);
|
|
107
|
+
const rtxPairLines = rtxPairs.map(rtxPair => `a=ssrc-group:FID ${rtxPair.join(' ')}`);
|
|
108
|
+
const simGroupLines = [
|
|
109
|
+
`a=ssrc-group:SIM ${simSSRCs.join(' ')}`
|
|
127
110
|
];
|
|
128
111
|
return rtxPairLines.concat(attrLines).concat(simGroupLines);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
}());
|
|
112
|
+
}
|
|
113
|
+
}
|
|
132
114
|
/**
|
|
133
115
|
* Get the matches for a given RegEx pattern.
|
|
134
116
|
* @param {string} section - SDP media section
|
|
@@ -136,9 +118,9 @@ var TrackAttributes = /** @class */ (function () {
|
|
|
136
118
|
* @returns {Array<Array<string>>} - Array of pattern matches
|
|
137
119
|
*/
|
|
138
120
|
function getMatches(section, pattern) {
|
|
139
|
-
|
|
140
|
-
return matches.map(
|
|
141
|
-
|
|
121
|
+
const matches = section.match(new RegExp(pattern, 'gm')) || [];
|
|
122
|
+
return matches.map(match => {
|
|
123
|
+
const matches = match.match(new RegExp(pattern)) || [];
|
|
142
124
|
return matches.slice(1);
|
|
143
125
|
});
|
|
144
126
|
}
|
|
@@ -148,7 +130,7 @@ function getMatches(section, pattern) {
|
|
|
148
130
|
* @returns {Set<SimSSRC>} Set of simulcast {@link SSRC}s
|
|
149
131
|
*/
|
|
150
132
|
function getSimulcastSSRCs(section) {
|
|
151
|
-
|
|
133
|
+
const simGroupPattern = '^a=ssrc-group:SIM ([0-9]+) ([0-9]+) ([0-9]+)$';
|
|
152
134
|
return new Set(flatMap(getMatches(section, simGroupPattern)));
|
|
153
135
|
}
|
|
154
136
|
/**
|
|
@@ -159,7 +141,7 @@ function getSimulcastSSRCs(section) {
|
|
|
159
141
|
* @param {string} - {@link SSRC} attribute value
|
|
160
142
|
*/
|
|
161
143
|
function getSSRCAttribute(section, ssrc, attribute) {
|
|
162
|
-
|
|
144
|
+
const pattern = `a=ssrc:${ssrc} ${attribute}:(.+)`;
|
|
163
145
|
return section.match(new RegExp(pattern))[1];
|
|
164
146
|
}
|
|
165
147
|
/**
|
|
@@ -169,8 +151,8 @@ function getSSRCAttribute(section, ssrc, attribute) {
|
|
|
169
151
|
* corresponding {@link PrimarySSRC}s
|
|
170
152
|
*/
|
|
171
153
|
function getSSRCRtxPairs(section) {
|
|
172
|
-
|
|
173
|
-
return new Map(getMatches(section, rtxPairPattern).map(
|
|
154
|
+
const rtxPairPattern = '^a=ssrc-group:FID ([0-9]+) ([0-9]+)$';
|
|
155
|
+
return new Map(getMatches(section, rtxPairPattern).map(pair => pair.reverse()));
|
|
174
156
|
}
|
|
175
157
|
/**
|
|
176
158
|
* Create SSRC attribute tuples.
|
|
@@ -178,9 +160,9 @@ function getSSRCRtxPairs(section) {
|
|
|
178
160
|
* @returns {Array<[SSRC, MediaStreamID, Track.ID]>}
|
|
179
161
|
*/
|
|
180
162
|
function createSSRCAttributeTuples(section) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
return ssrcs.map(
|
|
163
|
+
const [streamId, trackId] = flatMap(getMatches(section, '^a=msid:(.+) (.+)$'));
|
|
164
|
+
const ssrcs = flatMap(getMatches(section, '^a=ssrc:(.+) cname:.+$'));
|
|
165
|
+
return ssrcs.map(ssrc => [ssrc, streamId, trackId]);
|
|
184
166
|
}
|
|
185
167
|
/**
|
|
186
168
|
* Create a Map of MediaStreamTrack IDs and their {@link TrackAttributes}.
|
|
@@ -188,15 +170,15 @@ function createSSRCAttributeTuples(section) {
|
|
|
188
170
|
* @returns {Map<Track.ID, TrackAttributes>}
|
|
189
171
|
*/
|
|
190
172
|
function createTrackIdsToAttributes(section) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return ssrcAttrTuples.reduce(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
173
|
+
const simSSRCs = getSimulcastSSRCs(section);
|
|
174
|
+
const rtxPairs = getSSRCRtxPairs(section);
|
|
175
|
+
const ssrcAttrTuples = createSSRCAttributeTuples(section);
|
|
176
|
+
return ssrcAttrTuples.reduce((trackIdsToSSRCs, tuple) => {
|
|
177
|
+
const ssrc = tuple[0];
|
|
178
|
+
const streamId = tuple[1];
|
|
179
|
+
const trackId = tuple[2];
|
|
180
|
+
const trackAttributes = trackIdsToSSRCs.get(trackId) || new TrackAttributes(trackId, streamId, getSSRCAttribute(section, ssrc, 'cname'));
|
|
181
|
+
const primarySSRC = rtxPairs.get(ssrc) || null;
|
|
200
182
|
trackAttributes.addSSRC(ssrc, primarySSRC, simSSRCs.has(ssrc));
|
|
201
183
|
return trackIdsToSSRCs.set(trackId, trackAttributes);
|
|
202
184
|
}, new Map());
|
|
@@ -209,30 +191,30 @@ function createTrackIdsToAttributes(section) {
|
|
|
209
191
|
* @returns {string} - The transformed SDP media section
|
|
210
192
|
*/
|
|
211
193
|
function setSimulcastInMediaSection(section, trackIdsToAttributes) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
194
|
+
const newTrackIdsToAttributes = createTrackIdsToAttributes(section);
|
|
195
|
+
const newTrackIds = Array.from(newTrackIdsToAttributes.keys());
|
|
196
|
+
let trackIds = Array.from(trackIdsToAttributes.keys());
|
|
197
|
+
const trackIdsToAdd = difference(newTrackIds, trackIds);
|
|
198
|
+
const trackIdsToIgnore = difference(trackIds, newTrackIds);
|
|
217
199
|
// Update "trackIdsToAttributes" with TrackAttributes for new
|
|
218
200
|
// MediaStreamTrack IDs.
|
|
219
|
-
|
|
220
|
-
trackAttributesToAdd.forEach(
|
|
201
|
+
const trackAttributesToAdd = flatMap(trackIdsToAdd, trackId => newTrackIdsToAttributes.get(trackId));
|
|
202
|
+
trackAttributesToAdd.forEach(trackAttributes => {
|
|
221
203
|
trackAttributes.addSimulcastSSRCs();
|
|
222
204
|
trackIdsToAttributes.set(trackAttributes.trackId, trackAttributes);
|
|
223
205
|
});
|
|
224
206
|
// Get the SDP lines of the relevant MediaStreamTrack IDs from
|
|
225
207
|
// "trackIdsToAttributes".
|
|
226
208
|
trackIds = Array.from(trackIdsToAttributes.keys());
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
209
|
+
const relevantTrackIds = difference(trackIds, trackIdsToIgnore);
|
|
210
|
+
const relevantTrackAttributes = flatMap(relevantTrackIds, trackId => trackIdsToAttributes.get(trackId));
|
|
211
|
+
const excludeRtx = !section.match(/a=rtpmap:[0-9]+ rtx/);
|
|
212
|
+
const relevantSdpLines = flatMap(relevantTrackAttributes, trackAttributes => trackAttributes.toSdpLines(excludeRtx));
|
|
231
213
|
// Add the simulcast SSRC SDP lines to the media section. The Set ensures
|
|
232
214
|
// that the duplicates of the SSRC SDP lines that are in both "section" and
|
|
233
215
|
// "relevantSdpLines" are removed.
|
|
234
|
-
|
|
235
|
-
|
|
216
|
+
const sectionLines = flatMap(new Set(section.split('\r\n').concat(relevantSdpLines)));
|
|
217
|
+
const xGoogleFlagConference = 'a=x-google-flag:conference';
|
|
236
218
|
if (!section.match(xGoogleFlagConference)) {
|
|
237
219
|
sectionLines.push(xGoogleFlagConference);
|
|
238
220
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulcast.js","sourceRoot":"","sources":["../../../lib/util/sdp/simulcast.js"],"names":[],"mappings":"AAAA,YAAY,CAAC
|
|
1
|
+
{"version":3,"file":"simulcast.js","sourceRoot":"","sources":["../../../lib/util/sdp/simulcast.js"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
2
|
+
const { getMediaSections } = require('./');
|
|
3
3
|
/**
|
|
4
4
|
* An {@link TrackMatcher} matches an RTCTrackEvent with a MediaStreamTrack
|
|
5
5
|
* ID based on the MID of the underlying RTCRtpTransceiver.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
class TrackMatcher {
|
|
8
8
|
/**
|
|
9
9
|
* Construct an {@link TrackMatcher}.
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
constructor() {
|
|
12
12
|
Object.defineProperties(this, {
|
|
13
13
|
_midsToTrackIds: {
|
|
14
14
|
value: new Map(),
|
|
@@ -21,24 +21,23 @@ var TrackMatcher = /** @class */ (function () {
|
|
|
21
21
|
* @param {RTCTrackEvent} event
|
|
22
22
|
* @returns {?Track.ID}
|
|
23
23
|
*/
|
|
24
|
-
|
|
24
|
+
match(event) {
|
|
25
25
|
return this._midsToTrackIds.get(event.transceiver.mid) || null;
|
|
26
|
-
}
|
|
26
|
+
}
|
|
27
27
|
/**
|
|
28
28
|
* Update the {@link TrackMatcher} with a new SDP.
|
|
29
29
|
* @param {string} sdp
|
|
30
30
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this._midsToTrackIds = sections.reduce(
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
update(sdp) {
|
|
32
|
+
const sections = getMediaSections(sdp, '(audio|video)');
|
|
33
|
+
this._midsToTrackIds = sections.reduce((midsToTrackIds, section) => {
|
|
34
|
+
const midMatches = section.match(/^a=mid:(.+)$/m) || [];
|
|
35
|
+
const trackIdMatches = section.match(/^a=msid:.+ (.+)$/m) || [];
|
|
36
|
+
const mid = midMatches[1];
|
|
37
|
+
const trackId = trackIdMatches[1];
|
|
38
38
|
return mid && trackId ? midsToTrackIds.set(mid, trackId) : midsToTrackIds;
|
|
39
39
|
}, this._midsToTrackIds);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
}());
|
|
40
|
+
}
|
|
41
|
+
}
|
|
43
42
|
module.exports = TrackMatcher;
|
|
44
43
|
//# sourceMappingURL=trackmatcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trackmatcher.js","sourceRoot":"","sources":["../../../lib/util/sdp/trackmatcher.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"trackmatcher.js","sourceRoot":"","sources":["../../../lib/util/sdp/trackmatcher.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3C;;;GAGG;AACH,MAAM,YAAY;IAChB;;OAEG;IACH;QACE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAC5B,eAAe,EAAE;gBACf,KAAK,EAAE,IAAI,GAAG,EAAE;gBAChB,QAAQ,EAAE,IAAI;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACjE,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG;QACR,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE;YACjE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACxD,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;YAChE,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QAC5E,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC"}
|