日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

RTS信令協(xié)議規(guī)范

RTS超低延時直播是以WebRTC信令交互方式為基礎(chǔ),借助阿里云直播節(jié)點的全球覆蓋及優(yōu)秀調(diào)度算法能力,實現(xiàn)功能。通過閱讀本文,您可以了解RTS信令協(xié)議的詳細信息。本文適合具有WebRTC基礎(chǔ)的開發(fā)人員閱讀。

信令交互流程

信令交互圖如下所示:

image

信令交互流程

  1. 客戶端發(fā)送offer請求。

    1. 客戶端本地創(chuàng)建RTCPeerConnection,設(shè)置接收音視頻屬性Stream Direction,并創(chuàng)建offer SDP。

      // 開啟音視頻, recvonly or sendonly
      { offerToReceiveVideo: true, offerToReceiveAudio: true }
    2. 客戶端向直播服務(wù)發(fā)送拉流請求,通過HTTPS POST協(xié)議方式將JSON格式的請求信息發(fā)送至直播服務(wù)。協(xié)議格式請參見信令協(xié)議定義

      說明
      • version字段為協(xié)議版本,當前版本固定為2。

      • sdk_version字段為SDK版本,您可以自定義該字段。

    3. 生成協(xié)議內(nèi)容后,通過POST方式將信令地址給直播服務(wù)完成信令交互,在請求的JSON包體中包含要拉取的流地址。

      POST /app/streamname?auth=xxx HTTP/1.1
      Host: domain
      Connection: keep-alive
      Content-Length: 2205
      Content-Type: application/json
      說明

      信令地址與流地址基本一致,協(xié)議頭不同,如下所示:

      • 信令地址:https://domain/app/streamname?auth=xxx

      • 流地址:artc://domain/app/streamname?auth=xxx

  2. 服務(wù)端SDP Answer響應(yīng)。

    直播服務(wù)端校驗安全性后生成SDP Answer, 節(jié)點信息封裝在響應(yīng)包體中返回給客戶端。協(xié)議格式請參見信令協(xié)議定義

  3. 客戶端ICE建聯(lián)。

    1. 客戶端收到SDP Answer響應(yīng)后,設(shè)置到RTCPeerConnection中。

      peerConnection.setRemoteDescription(new RTCSessionDescription(answer.jsep));
    2. RTCPeerConnection啟動ICE建連流程以及后續(xù)的DTLS流程,媒體通道建立成功后可以獲取到直播服務(wù)輸出的媒體流,實現(xiàn)WebRTC標準接入拉流播放。

  4. 斷開連接。

    客戶端需要斷開連接停止推流或播放,使用DTLS的Alert消息表達。

    斷開連接

H5 Demo示例

// Create peer connection and local offer sdp.
peerConnection = new RTCPeerConnection();
peerConnection.onicecandidate = iceCandidateCallback;
peerConnection.ontrack = remoteStreamCallback;
peerConnection.createOffer({ offerToReceiveVideo: true, offerToReceiveAudio: true })
      .then(signaling_pull).catch(errorHandler);


// CDN live post pull stream request.
function signaling_pull(offer_sdp) {
  console.log('local offer sdp', offer_sdp);

  peerConnection.setLocalDescription(offer_sdp).then(function() {
    // Get pull stream url.
    var stream_url = $("#stream_url").val();
    console.log("stream url:" , stream_url);

    // Add sdk and protocol versions.
    var protocol_version = 2;
    var sdk_version = "0.0.1";

    $.ajax({url: stream_url, data: JSON.stringify({
          mode: "live",
          version: protocol_version,
          sdk_version: sdk_version,
          jsep:description,
      }),
      type: "post",
      success:function(result){
          var signal = JSON.parse(result);
          peerConnection.setRemoteDescription(new RTCSessionDescription(signal.jsep)).then(function() {
              console.log("get remote answer sdp: ", signal.jsep.sdp);
          }).catch(errorHandler);
      }});
  }).catch(errorHandler);
}

信令協(xié)議定義

RTS信令協(xié)議通道為HTTPS(短鏈接),格式為JSON。協(xié)議詳情如下所示:

請求示例

Request:
{
    "version":2,
    "sdk_version":"0.0.1",
    "mode":"live",
    "pull_streams":[
        {
            "url":"artc://demo.aliyundoc.com/liveApp****/liveStream****",
            "amsid":[
                "rts audio"
            ],
            "vmsid":[
                "rts video"
            ]
        }
    ],
    "jsep":{
        "type":"offer",
        "sdp":"v=0\n\ro=- 6839248142876176651 2 IN IP4 127.0.0.1\n\rs=-\n\r以下省略"
    }
}

參數(shù)

類型

是否必選

描述

mode

string

模式,取值:live。

version

int

協(xié)議版本號,取值:2。

push_stream

string

推流URL。

pull_streams

[]object

拉流對象,支持多個拉流。詳情請參見下表。

sdk_version

string

SDK版本號。

jsep.type

string

SDP類型,取值:offer。

jsep.sdp

string

SDP描述。

表 1. pull_stream參數(shù)

字段

類型

是否必填

描述

url

string

拉流URL,例如:artc://<拉流地址>

amsid

[]string

拉流音頻msid,直播場景取值rts audio

vmsid

[]string

拉流視頻msid,直播場景取值rts video

相應(yīng)示例

Response:
{
    "trace_id":"2_1591173296_101.227.XX.XX_702080732320_dec327eb6eed0e0b07b349c8a565****",
    "code":200,
    "jsep":{
        "type":"answer",
        "sdp":"v=0\r\no=- 1591173291 2 IN IP4 127.0.0.1\n\r 以下省略"
    }
}

字段

類型

是否必需

描述

code

int

返回碼。正確返回200,錯誤碼請參見下表。

trace_id

string

全局唯一請求標識ID。由CDN生成,請盡量做好保存,用于對請求進行定位和問題排查。

jsep.type

string

SDP類型,取值:answer。

jsep.sdp

string

直播CDN回源拉流生成SDP。

表 2. 錯誤碼描述

錯誤碼

描述

403

鑒權(quán)失敗。

404

流不存在。

611

需要客戶端強制降級到TCP播放。

302

需要客戶端向新的服務(wù)地址發(fā)起信令請求。

增強的SDP

在信令交互中,SDP用來描述媒體信息。通用的SDP協(xié)商是基于RFC 4566展開的,阿里云RTS在其基礎(chǔ)上擴展出了更多豐富的語義,兼容直播行業(yè)的特點,支持更多的音視頻封裝和通信協(xié)議,突破了WebRTC僅支持音頻OPUS、不支持視頻B幀等的窘境,滿足了如今流媒體業(yè)界日益擴大的協(xié)議族。

支持AAC音頻

RTS支持傳輸任何能在RTMP中傳輸?shù)腁AC格式的音頻,包括AAC-LC、HE-AACv1和HE-AACv2。AAC格式詳情請參見ISO IEC 14496-3

RTS支持以LATM格式進行AAC音頻傳輸。LATM可根據(jù)傳輸中的音頻是否自帶音頻編碼信息來決定是帶內(nèi)(每個音頻都發(fā))或帶外(只發(fā)一次)音頻編碼信息,即由Audio Mux Element中的muxconfigPresent決定AudioSpecificConfig是帶內(nèi)或帶外傳輸。因此,LATM相對ADTS更靈活,其AudioSpecificConfig如果保持不變,則可以通過SDP會話先傳輸StreamMuxConfig(AudioSpecificConfig)信息。

在信令交互階段,RTS會解析推流側(cè)音頻編碼信息,并在協(xié)商響應(yīng)中返回對應(yīng)的信息。如下所示:

offer SDP

answer SDP

AAC-LC

HE-AACv1

HE-AACv2

m=audio 9 UDP/RTP/AVPF 120 96 
a=rtpmap:120 MP4A-LATM/44100/2
AudioSpecificConfig = 0x1210
AudioSpecificConfig = 2b920800
AudioSpecificConfig = eb8a0800
a=rtpmap:120 MP4A-LATM/44100/2
a=fmtp:120 cpresent=0;profile-level-id=1;object=2;config=400024203fc0
a=rtpmap:120 MP4A-LATM/44100/2 
a=fmtp:120 cpresent=0;profile-level-id=1;object=2;config=4000572410003fc0;SBR-enabled=1
a=rtpmap:120 MP4A-LATM/44100/2 
a=fmtp:120 cpresent=0;object=2;profile-level-id=1;config=4001d71410003fc0;PS-enabled=1;SBR-enabled=1

此處,通過在answer SDP音頻MP4A-LATM的fmtp中添加SBR-enabled=1表示AAC-HE,添加SBR-enabled=1PS-enabled=1表示HE-AACv2。由于從AAC-LC到HE-AACv2有技術(shù)遞進關(guān)系,因此在表示fmtp時,遞進地增加SBR、PS的標識來表示不同的AAC格式。此外,在fmtp中添加config=StreamMuxConfig,其由推流AudioSpecificConfig信息組裝而來,具體地描述了音頻編碼的各種參數(shù)信息,客戶端可以各取所需。

002

更多信息,請參見AAC-LC / HE-AACv1 / HE-AACv2 Encoder Parameters

支持H.265視頻

RTS會解析推流側(cè)視頻編碼信息(H.264、H.265),在answer SDP中根據(jù)推流側(cè)實際的編碼方式,返回H.264H.265

編碼類型

offer SDP

answer SDP

H.265

a=rtpmap:102 H265/90000
a=rtpmap:122 H265/90000
a=fmtp:122

支持B幀視頻

在信令交互階段,客戶端可以在offer SDP中增加字段標識其是否支持解析B幀視頻。例如:在視頻fmtp中增加BFrame-enabled = 1標識以表示支持B幀,此時,RTP timestamp = PTS,sequence number遞增,正常情況下客戶端按照sequence number解碼即可。如果不支持B幀,RTS可以對視頻源流進行轉(zhuǎn)碼,去掉B幀。

此外,RTS還支持額外返回CTS擴展頭以支持需要精確計算DTS的客戶端(PTS=DTS+CTS),如果offer SDP中帶有a=extmap:{$id} uri:webrtc:rtc:rtp-hdrext:video:CompositionTime,RTS會在每一幀視頻的第一個RTP包上增加extension identifier = {$id}的CTS擴展頭,id由offer SDP來決定。offer SDP片段及拉流抓包示例如下所示:

Offer SDP片段004

RTS給予客戶端充分的表達能力,將決定權(quán)下放給用戶,讓其決定是否接受視頻帶B幀,以及是否需要額外的CTS信息,構(gòu)建更通用的通信能力。

MSID相關(guān)概念

關(guān)于MSID詳細信息,請參見The Msid Mechanism