@@ -88,24 +88,21 @@ const videoElem = ...;
8888
8989transport .readable .pipeTo (demuxer .writable );
9090
91- const audioDecoder = new AudioDecoder ({codec: " opus" });
91+ const audioDecoder = new AudioDecoder ({codec: ' opus' });
9292const audioTrackWriter = new AudioTrackWriter ();
9393demuxer .audio
94- .pipeThrough (audioBuffer)
95- .pipeThrough (audioDecoder)
96- .pipeTo (audioTrackWriter .writable );
94+ .pipeThrough (audioBuffer)
95+ .pipeThrough (audioDecoder)
96+ .pipeTo (audioTrackWriter .writable );
9797
98- const videoDecoder = new VideoDecoder ({codec: " vp8" });
98+ const videoDecoder = new VideoDecoder ({codec: ' vp8' });
9999const videoWriter = new VideoTrackWriter ();
100100demuxer .video
101- .pipeThrough (videoBuffer)
102- .pipeThrough (videoDecoder)
103- .pipeTo (videoTrackWriter .writable );
101+ .pipeThrough (videoBuffer)
102+ .pipeThrough (videoDecoder)
103+ .pipeTo (videoTrackWriter .writable );
104104
105- const mediaStream = new MediaStream ();
106- mediaStream .addTrack (audioWriter .track );
107- mediaStream .addTrack (videoWriter .track );
108- videoElem .srcObject = mediaStream;
105+ videoElem .srcObject = new MediaStream ([audioWriter .track , videoWriter .track ]);
109106```
110107
111108### Example of encode for live streaming upload
@@ -120,20 +117,25 @@ const transport = ...; // Sends muxed frames to server
120117
121118const audioTrackReader = new AudioTrackReader (audioTrack);
122119const audioEncoder = new AudioEncoder ({
123- codec: " opus" , bitsPerSecond: 60000
120+ codec: ' opus' ,
121+ settings: {
122+ targetBitRate: 60_000 ,
123+ },
124124});
125125audioTrackReader .readable
126- .pipeThrough (audioEncoder)
127- .pipeTo (muxer .audio );
126+ .pipeThrough (audioEncoder)
127+ .pipeTo (muxer .audio );
128128
129129const videoTrackReader = new VideoTrackReader (videoTrack);
130130const videoEncoder = new VideoEncoder ({
131- codec: " vp8" ,
132- bitsPerSecond: 1000000
131+ codec: ' vp8' ,
132+ settings: {
133+ targetBitRate: 1_000_000
134+ },
133135});
134136videoTrackReader .readable
135- .pipeThrough (videoEncoder)
136- .pipeTo (muxer .video );
137+ .pipeThrough (videoEncoder)
138+ .pipeTo (muxer .video );
137139
138140muxer .readable .pipeTo (transport .writable );
139141
@@ -149,19 +151,24 @@ const output = ...; // Writes container to source (like a file)
149151const demuxer = ... ; // Reads container into frames
150152const muxer = ... ; // Writes frames into container
151153
152- const audioDecoder = new AudioDecoder ({codec: " aac" });
154+ const audioDecoder = new AudioDecoder ({codec: ' aac' });
153155const audioEncoder = new AudioEncoder ({
154- codec: " opus" ,
155- bitsPerSecond: 60000
156+ codec: ' opus' ,
157+ settings: {
158+ targetBitRate: 60_000 ,
159+ },
156160});
157161demuxer .audio
158- .pipeThrough (audioDecoder)
159- .pipeThrough (audioEncoder)
160- .pipeTo (muxer .audio );
162+ .pipeThrough (audioDecoder)
163+ .pipeThrough (audioEncoder)
164+ .pipeTo (muxer .audio );
161165
162- const videoDecoder = new VideoDecoder ({codec: " h264" });
166+ const videoDecoder = new VideoDecoder ({codec: ' h264' });
163167const videoEncoder = new VideoEncoder ({
164- codec: " vp8" , bitsPerSecond: 1000000
168+ codec: ' vp8' ,
169+ settings: {
170+ bitsPerSecond: 1_000_000 ,
171+ },
165172});
166173demuxer .video
167174 .pipeThrough (videoDecoder)
@@ -186,45 +193,49 @@ const transport = ...; // Sink of encrypted, muxed messages
186193
187194const audioTrackReader = new AudioTrackReader (audioTrack);
188195const audioEncoder = new AudioEncoder ({
189- codec: " opus" ,
190- bitsPerSecond: 60000
196+ codec: ' opus' ,
197+ settings: {
198+ targetBitRate: 60_000 ,
199+ },
191200});
192201audioTrackReader .readable
193- .pipeThrough (audioEncoder)
194- .pipeThrough (audioEncryptor)
195- .pipeThrough (muxer)
196- .pipeTo (transport .writable );
202+ .pipeThrough (audioEncoder)
203+ .pipeThrough (audioEncryptor)
204+ .pipeThrough (muxer)
205+ .pipeTo (transport .writable );
197206
198207const videoTrackReader = new VideoTrackReader (videoTrack);
199208const videoEncoder = new VideoEncoder ({
200- codec: " vp9" ,
201- bitsPerSecond: 1000000 ,
202- // Two spatial layers with two temporal layers each
203- layers: [{
204- // Quarter size base layer
205- id: " p0" ,
206- temporalSlots: [0 ],
207- scaleDownBy: 2 ,
208- dependsOn: [" p0" ],
209- }, {
210- id: " p1"
211- temporalSlots: [1 ],
212- scaleDownBy: 2 ,
213- dependsOn: [" p0" ],
214- }, {
215- id: " s0" ,
216- temporalSlots: [0 ],
217- dependsOn: [" p0" , " s0" ],
218- }, {
219- id: " s1" ,
220- temporalSlots: [1 ],
221- dependsOn: [" p1" , " s0" , " s1" ]
222- }]
209+ codec: ' vp9' ,
210+ settings: {
211+ bitsPerSecond: 1000000 ,
212+ // Two spatial layers with two temporal layers each
213+ layers: [{
214+ // Quarter size base layer
215+ id: ' p0' ,
216+ temporalSlots: [0 ],
217+ scaleDownBy: 2 ,
218+ dependsOn: [' p0' ],
219+ }, {
220+ id: ' p1'
221+ temporalSlots: [1 ],
222+ scaleDownBy: 2 ,
223+ dependsOn: [' p0' ],
224+ }, {
225+ id: ' s0' ,
226+ temporalSlots: [0 ],
227+ dependsOn: [' p0' , ' s0' ],
228+ }, {
229+ id: ' s1' ,
230+ temporalSlots: [1 ],
231+ dependsOn: [' p1' , ' s0' , ' s1' ],
232+ }],
233+ },
223234});
224235videoTrackReader .readable
225- .pipeThrough (videoEncoder)
226- .pipeThrough (videoEncryptor)
227- .pipeThrough (muxer .video )
236+ .pipeThrough (videoEncoder)
237+ .pipeThrough (videoEncryptor)
238+ .pipeThrough (muxer .video )
228239
229240muxer .readable .pipeTo (transport .writable );
230241
@@ -241,26 +252,23 @@ const videoElem = ...;
241252
242253transport .readable .pipeTo (demuxer .writable );
243254
244- const audioDecoder = new AudioDecoder ({codec: " opus" });
255+ const audioDecoder = new AudioDecoder ({codec: ' opus' });
245256const audioTrackWriter = new AudioTrackWriter ();
246257demuxer .audio
247- .pipeThrough (audioDecryptor)
248- .pipeThrough (audioBuffer)
249- .pipeThrough (audioDecoder)
250- .pipeTo (audioTrackWriter .writable );
258+ .pipeThrough (audioDecryptor)
259+ .pipeThrough (audioBuffer)
260+ .pipeThrough (audioDecoder)
261+ .pipeTo (audioTrackWriter .writable );
251262
252- const videoDecoder = new videoDecoder ({codec: " vp8" });
263+ const videoDecoder = new videoDecoder ({codec: ' vp8' });
253264const videoWriter = new VideoTrackWriter ();
254265demuxer .video
255- .pipeThrough (videoDecryptor)
256- .pipeThrough (videoBuffer)
257- .pipeThrough (videoDecoder)
258- .pipeTo (videoTrackWriter .writable );
266+ .pipeThrough (videoDecryptor)
267+ .pipeThrough (videoBuffer)
268+ .pipeThrough (videoDecoder)
269+ .pipeTo (videoTrackWriter .writable );
259270
260- const mediaStream = new MediaStream ();
261- mediaStream .addTrack (audioWriter .track );
262- mediaStream .addTrack (videoWriter .track );
263- videoElem .srcObject = mediaStream;
271+ videoElem .srcObject = new MediaStream ([audioWriter .track , videoWriter .track ]);
264272
265273```
266274
@@ -275,24 +283,29 @@ const demuxer = ...; // Reads container into frames
275283const muxer = ... ; // Writes frames into container
276284
277285
278- const audioDecoder = new AudioDecoder ({codec: " aac" });
286+ const audioDecoder = new AudioDecoder ({codec: ' aac' });
279287const audioEncoder = new AudioEncoder ({
280- codec: " opus" ,
281- bitsPerSecond: 60000
288+ codec: ' opus' ,
289+ settings: {
290+ targetBitRate: 60_000
291+ },
282292});
283293demuxer .audio
284- .pipeThrough (audioDecoder)
285- .pipeThrough (audioEncoder)
286- .pipeTo (muxer .audio );
294+ .pipeThrough (audioDecoder)
295+ .pipeThrough (audioEncoder)
296+ .pipeTo (muxer .audio );
287297
288- const videoDecoder = new VideoDecoder ({codec: " h264" });
298+ const videoDecoder = new VideoDecoder ({codec: ' h264' });
289299const videoEncoder = new VideoEncoder ({
290- codec: " vp8" , bitsPerSecond: 1000000
300+ codec: ' vp8' ,
301+ settings: {
302+ bitsPerSecond: 1_000_000 ,
303+ },
291304});
292305demuxer .video
293- .pipeThrough (videoDecoder)
294- .pipeThrough (videoEncoder)
295- .pipeTo (muxer .video );
306+ .pipeThrough (videoDecoder)
307+ .pipeThrough (videoEncoder)
308+ .pipeTo (muxer .video );
296309
297310input .readable .pipeInto (demuxer .writable );
298311muxer .readable .pipeInto (output .writable );
0 commit comments