ORTC SVC SimulCast

Preview:

Citation preview

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

Recommended