Download - ORTC SVC SimulCast
ORTC SimulCast
#niku_sushi Jxck
● id: Jxck● github: Jxck● twitter: @jxck_● about: http://jxck.io● blog: http://jxck.hatenablog.com● podcast: http://mozaic.fm● Love: music
Jack
Q: Why ORTC ?A: long story...
3
4
that’s all thank you !!
ORTC ≒ WebRTC 1.0 + SimulCast + MultiStream interop
5
Simulcast
6
SimulCast ?
7
Different Context !!
AVC Simulcast
8
● re-encoding for each client capability, network○ heavy resource○ latecy at server
SVC Simulcast
9
● SVC encode at client○ multi layered video○ router choose a layer
SVC
10
SVC(scalable video coding)
11
● multi layered coding○ 1-base layer○ n-enhancement layer
● parameter○ Temporal (frame rate)○ Spatial (resolution)○ Quality (SNR)
Temporal
12
Spatial
13
Quality
14
layer● base layer
○ lowest quality for video conference○ small size○ error correction
● enhancement layer○ merge with base layer○ more size○ fallback to base layer if lost
● layer choice○ layer routing server choice○ negotiation, bandwidth estimation etc
15
ORTC API
16
Over View
17
before / after PeerConnection
18
// beforelet peer = new PeerConnection();
// call these during singallingpeer.addStream();peer.onnegotiationneeded;peer.createOffer/Answer();peer.setLocal/RemoteDescription();peer.onicecandidate;peer.addIceCandidate();
// ALL API are on PeerConnection Class
before / after PeerConnection
19
// afterlet iceGatherer = new RTCIceGatherer(iceGatherOptions);let iceTransport = new RTCIceTransport(iceGatherer);let dtlsTransport = new RTCDtlsTransport(iceTransport);
let rtpSender = new RTCRtpSender(mediaStreamTrack, dtlsTransport);let rtpReceiver = new RTCRtpReceiver(dtlsTransport);let sendCapas = RTCRtpSender.getCapabilities('video');let recvCapas = RTCRtpReceiver.getCapabilities('video');// exchange caps
// ALL API are on each Classes
before / after DataChannel
20
// after
let iceGatherer = new RTCIceGatherer(iceGatherOptions);let iceTransport = new RTCIceTransport(iceGatherer);let dtlsTransport = new RTCDtlsTransport(iceTransport);let sctpTransport = new RTCSctpTransport(dtlsTransport);
let channel = new RTCDataChannel(sctpTransport);
// before
peerConnection.createDataChannel((channel) => {
});
SVC
21
var encodings = [ { // 低解像度ベースレイヤ(1/2 フレームレート 1/2 解像度) encodingId: "0", resolutionScale: 2.0, framerateScale: 2.0 }, { // 拡張解像度ベースレイヤ(1/2 フレームレート 1/1 解像度) encodingId: "E0", resolutionScale: 1.0, framerateScale: 2.0 }, { // 低解像度ベースへの拡張レイヤ (1/1 レート, 1/2 解像度) encodingId: "1", dependencyEncodingIds: ["0"], resolutionScale: 2.0, framerateScale: 1.0 }, { // 拡張解像度ベースへの拡張レイヤ (1/1 レート, 1/1 解像度) encodingId: "E1", dependencyEncodingIds: ["E0"], resolutionScale: 1.0, framerateScale: 1.0 }];
complicated ?
22
classes based on protocol stackhttp://www.slideshare.net/iwashi86/20140801-web-rtcmeetup3r3
WebRTC NV ≒ WebRTC.merge(ORTC)
23
more:http://jxck.hatenablog.com/entry/ortc-to-webrtcnv
24
have a nice web :)
25
Jack