Skip to content

Commit 289ecbe

Browse files
authored
Merge pull request w3c#22 from steveanton/examples
Update explainer examples
2 parents 3948964 + 5fd4580 commit 289ecbe

File tree

1 file changed

+97
-84
lines changed

1 file changed

+97
-84
lines changed

explainer.md

Lines changed: 97 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -88,24 +88,21 @@ const videoElem = ...;
8888

8989
transport.readable.pipeTo(demuxer.writable);
9090

91-
const audioDecoder = new AudioDecoder({codec: "opus"});
91+
const audioDecoder = new AudioDecoder({codec: 'opus'});
9292
const audioTrackWriter = new AudioTrackWriter();
9393
demuxer.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'});
9999
const videoWriter = new VideoTrackWriter();
100100
demuxer.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

121118
const audioTrackReader = new AudioTrackReader(audioTrack);
122119
const audioEncoder = new AudioEncoder({
123-
codec: "opus", bitsPerSecond: 60000
120+
codec: 'opus',
121+
settings: {
122+
targetBitRate: 60_000,
123+
},
124124
});
125125
audioTrackReader.readable
126-
.pipeThrough(audioEncoder)
127-
.pipeTo(muxer.audio);
126+
.pipeThrough(audioEncoder)
127+
.pipeTo(muxer.audio);
128128

129129
const videoTrackReader = new VideoTrackReader(videoTrack);
130130
const videoEncoder = new VideoEncoder({
131-
codec: "vp8",
132-
bitsPerSecond: 1000000
131+
codec: 'vp8',
132+
settings: {
133+
targetBitRate: 1_000_000
134+
},
133135
});
134136
videoTrackReader.readable
135-
.pipeThrough(videoEncoder)
136-
.pipeTo(muxer.video);
137+
.pipeThrough(videoEncoder)
138+
.pipeTo(muxer.video);
137139

138140
muxer.readable.pipeTo(transport.writable);
139141

@@ -149,19 +151,24 @@ const output = ...; // Writes container to source (like a file)
149151
const demuxer = ...; // Reads container into frames
150152
const muxer = ...; // Writes frames into container
151153

152-
const audioDecoder = new AudioDecoder({codec: "aac"});
154+
const audioDecoder = new AudioDecoder({codec: 'aac'});
153155
const audioEncoder = new AudioEncoder({
154-
codec: "opus",
155-
bitsPerSecond: 60000
156+
codec: 'opus',
157+
settings: {
158+
targetBitRate: 60_000,
159+
},
156160
});
157161
demuxer.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'});
163167
const videoEncoder = new VideoEncoder({
164-
codec: "vp8", bitsPerSecond: 1000000
168+
codec: 'vp8',
169+
settings: {
170+
bitsPerSecond: 1_000_000,
171+
},
165172
});
166173
demuxer.video
167174
.pipeThrough(videoDecoder)
@@ -186,45 +193,49 @@ const transport = ...; // Sink of encrypted, muxed messages
186193

187194
const audioTrackReader = new AudioTrackReader(audioTrack);
188195
const audioEncoder = new AudioEncoder({
189-
codec: "opus",
190-
bitsPerSecond: 60000
196+
codec: 'opus',
197+
settings: {
198+
targetBitRate: 60_000,
199+
},
191200
});
192201
audioTrackReader.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

198207
const videoTrackReader = new VideoTrackReader(videoTrack);
199208
const 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
});
224235
videoTrackReader.readable
225-
.pipeThrough(videoEncoder)
226-
.pipeThrough(videoEncryptor)
227-
.pipeThrough(muxer.video)
236+
.pipeThrough(videoEncoder)
237+
.pipeThrough(videoEncryptor)
238+
.pipeThrough(muxer.video)
228239

229240
muxer.readable.pipeTo(transport.writable);
230241

@@ -241,26 +252,23 @@ const videoElem = ...;
241252

242253
transport.readable.pipeTo(demuxer.writable);
243254

244-
const audioDecoder = new AudioDecoder({codec: "opus"});
255+
const audioDecoder = new AudioDecoder({codec: 'opus'});
245256
const audioTrackWriter = new AudioTrackWriter();
246257
demuxer.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'});
253264
const videoWriter = new VideoTrackWriter();
254265
demuxer.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
275283
const muxer = ...; // Writes frames into container
276284

277285

278-
const audioDecoder = new AudioDecoder({codec: "aac"});
286+
const audioDecoder = new AudioDecoder({codec: 'aac'});
279287
const audioEncoder = new AudioEncoder({
280-
codec: "opus",
281-
bitsPerSecond: 60000
288+
codec: 'opus',
289+
settings: {
290+
targetBitRate: 60_000
291+
},
282292
});
283293
demuxer.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'});
289299
const videoEncoder = new VideoEncoder({
290-
codec: "vp8", bitsPerSecond: 1000000
300+
codec: 'vp8',
301+
settings: {
302+
bitsPerSecond: 1_000_000,
303+
},
291304
});
292305
demuxer.video
293-
.pipeThrough(videoDecoder)
294-
.pipeThrough(videoEncoder)
295-
.pipeTo(muxer.video);
306+
.pipeThrough(videoDecoder)
307+
.pipeThrough(videoEncoder)
308+
.pipeTo(muxer.video);
296309

297310
input.readable.pipeInto(demuxer.writable);
298311
muxer.readable.pipeInto(output.writable);

0 commit comments

Comments
 (0)