關(guān)于Android接入AWS KVS with WebRTC實(shí)現(xiàn)P2P視頻(一)

關(guān)注博主個(gè)人簡(jiǎn)介踢俄,技術(shù)不迷路~

前言

最近接到需求需要接入亞馬遜的KVS SDK來(lái)實(shí)現(xiàn)P2P視頻咪橙;由于本人也是初次接觸這塊內(nèi)容聂宾,所以接入過(guò)程難免有一些坑要踩的果善。。系谐。所以趁有時(shí)間也把是把遇到的問(wèn)題在此記錄一下巾陕,也希望能幫助其它同學(xué)避免踩坑。本篇主要是一些概念相關(guān)的知識(shí)點(diǎn)的記錄纪他。關(guān)于問(wèn)題點(diǎn)可以前往 【關(guān)于Android接入AWS KVS with WebRTC實(shí)現(xiàn)P2P視頻(二)】

Tips:由于都是一些概念上的東西鄙煤,所以這里也就把AWS KVS文檔移過(guò)來(lái)了。這些內(nèi)容也是我在完成需求后認(rèn)為比較重要的知識(shí)點(diǎn)茶袒;尤其是第一次接觸的同學(xué)梯刚,最好仔細(xì)看下并理解這些概念,這樣會(huì)在后面的接入過(guò)程中更好的幫助理解AWS提供的Demo薪寓。本人就是因?yàn)殚_(kāi)始沒(méi)有好好看這些文檔亡资,所以導(dǎo)致后面在接入過(guò)程遇到棘手的問(wèn)題后花了不少時(shí)間和精力去看這些知識(shí)點(diǎn)。

一向叉、Amazon Kinesis Video Streams WebRTC基本概念(簡(jiǎn)稱:AWS KVS)

WebRTC 是一個(gè)開(kāi)放的技術(shù)規(guī)范锥腻,它通過(guò)簡(jiǎn)單的 API 支持跨瀏覽器和移動(dòng)應(yīng)用程序的實(shí)時(shí)通信 (RTC)。它使用對(duì)等技術(shù)在連接的對(duì)等方之間進(jìn)行實(shí)時(shí)數(shù)據(jù)交換母谎,并提供 human-to-human 交互所需的低延遲媒體流瘦黑。除了用于可靠和安全的實(shí)時(shí)媒體和數(shù)據(jù)流的協(xié)議規(guī)范外,WebRTC 規(guī)范還包括一組 IETF 協(xié)議奇唤,包括建立交互式連接幸斥、使用中繼繞 NAT (TURN) 進(jìn)行遍歷和用于建立 peer-to-peer 連接的 NAT 會(huì)話遍歷實(shí)用程序 (STUN)。

這里關(guān)于google的webrtc有一個(gè)很坑的點(diǎn)(問(wèn)題描述:三星冻记、一加等機(jī)型可以拉取到視頻流睡毒,而像oppo、vivo冗栗、華為等包括google的手機(jī)會(huì)顯示黑屏現(xiàn)象)演顾」┎螅可以前往 【關(guān)于Android接入AWS KVS with WebRTC實(shí)現(xiàn)P2P視頻(二)】查看解決方法

Amazon Kinesis Video Streams 提供符合標(biāo)準(zhǔn)的 WebRTC 實(shí)現(xiàn)作為完全托管的功能。您可以使用 Amazon Kinesis Video Streams with WebRTC 安全地進(jìn)行媒體的實(shí)時(shí)流式傳輸钠至,或在任何攝像頭 IoT 設(shè)備與符合 WebRTC 的移動(dòng)或 Web 播放器之間執(zhí)行雙向音頻或視頻交互葛虐。借助這項(xiàng)全面托管的功能,您不必構(gòu)建棉钧、運(yùn)營(yíng)或擴(kuò)展任何與 WebRTC 相關(guān)的云基礎(chǔ)設(shè)施(例如信令或媒體中繼服務(wù)器)便能安全地在應(yīng)用程序和設(shè)備間流式傳輸媒體屿脐。

二、Kinesis Video Streams with WebRTC 工作方式

以下是使用 WebRTC 的 Amazon Kinesis Video Streams 特有的關(guān)鍵術(shù)語(yǔ)和概念宪卿。

  • 信令通道(Signaling channel

    一種資源的诵,使應(yīng)用程序能夠發(fā)現(xiàn)、設(shè)置佑钾、控制和終止 peer-to-peer 通過(guò)交換信令消息進(jìn)行連接西疤。信令消息是兩個(gè)應(yīng)用程序相互交換以建立的元數(shù)據(jù) peer-to-peer 連接。此元數(shù)據(jù)包括媒體編解碼器和編解碼器參數(shù)等本地媒體信息休溶,及兩個(gè)應(yīng)用程序互相連接以進(jìn)行實(shí)時(shí)流式傳輸而可能使用的網(wǎng)絡(luò)候選路徑代赁。

    流式傳輸應(yīng)用程序可以與信令通道保持持續(xù)連接,并等待其他應(yīng)用程序連接到它們兽掰“虐或者,只有當(dāng)它們需要實(shí)時(shí)流媒體時(shí)孽尽,才能連接到信令通道窖壕。信令信道使應(yīng)用程序能夠在 one-to-few 模型,使用 one 的概念主設(shè)備連接到多個(gè)查看器泻云。發(fā)起連接的應(yīng)用程序使用 ConnectAsMaster API 承擔(dān)主設(shè)備的責(zé)任艇拍,并等待查看器連接。然后宠纯,多達(dá) 10 個(gè)應(yīng)用程序可以通過(guò)調(diào)用 ConnectAsViewer API 來(lái)承擔(dān)查看器責(zé)任卸夕,以連接到該信令通道。連接到信令信道后婆瓜,主應(yīng)用程序和查看器應(yīng)用程序可以互相發(fā)送信令消息以建立 peer-to-peer 用于直播媒體的連接快集。

  • 對(duì)等(Peer)

    配置為通過(guò) Kinesis Video Streams with WebRTC 實(shí)現(xiàn)實(shí)時(shí)雙向流式傳輸?shù)娜魏卧O(shè)備或應(yīng)用程序(例如,移動(dòng)或網(wǎng)絡(luò)應(yīng)用程序廉白、網(wǎng)絡(luò)攝像頭个初、家庭安全攝像頭、嬰兒監(jiān)視器等)猴蹂。

  • 主實(shí)例(Master)

    發(fā)起連接并連接到信令通道的對(duì)等方院溺,能夠發(fā)現(xiàn)媒體并與任何信令通道的已連接查看器交換媒體。 目前磅轻,一個(gè)信令通道只能有一個(gè)主設(shè)備珍逸。

  • 查看者

    連接到信令通道的對(duì)等方只能通過(guò)信令通道的主設(shè)備發(fā)現(xiàn)和交換媒體逐虚。查看器無(wú)法通過(guò)給定的信令通道發(fā)現(xiàn)其他查看器或與其交互。一個(gè)信令通道最多可以有 10 個(gè)連接的查看器谆膳。

三叭爱、WebRTC 技術(shù)概念

  • NAT 的會(huì)話遍歷實(shí)用工具 (STUN)

    一種協(xié)議,用于發(fā)現(xiàn)您的公有地址并確定路由器中阻止與對(duì)等方直接連接的任何限制漱病。

  • 使用中繼繞過(guò) NAT 的遍歷 (TURN)

    通過(guò)打開(kāi)與 TURN 服務(wù)器的連接并通過(guò)該服務(wù)器中繼所有信息來(lái)繞過(guò)對(duì)稱 NAT 限制的服務(wù)器买雾。

這里我因?yàn)榇中脑斐纱蜷_(kāi)TURN服務(wù)失敗,導(dǎo)致無(wú)法跨網(wǎng)絡(luò)推拉流杨帽,也頭痛了一下

  • 會(huì)話描述協(xié)議 (SDP)

    一種描述連接的多媒體內(nèi)容的標(biāo)準(zhǔn)漓穿,例如分辨率、格式睦尽、編解碼器器净、加密等型雳,以便一旦傳輸數(shù)據(jù)当凡,兩個(gè)對(duì)等方就可以相互理解。

  • SDP 提議

    由代理發(fā)送的 SDP 消息纠俭,代理生成會(huì)話描述以創(chuàng)建或修改會(huì)話沿量。它描述所需媒體通信的各個(gè)方面。

  • SDP 應(yīng)答

    應(yīng)答者響應(yīng)從提議人收到的提議而發(fā)送的 SDP 消息冤荆。應(yīng)答指出了已接受的各個(gè)方面朴则。例如,提議中的所有音頻和視頻流是否都被接受钓简。

  • 交互式連接建立 (ICE)

    允許您的 Web 瀏覽器與對(duì)等方連接的框架乌妒。

  • ICE 候選項(xiàng)

    發(fā)送對(duì)等方能夠用于通信的方法。

四外邓、STUN撤蚊、TURN 和 ICE 如何協(xié)同工作

讓我們來(lái)看看兩個(gè)對(duì)等方 A 和 B 的情況,它們都使用 WebRTC 對(duì)等雙向媒體流式傳輸(例如损话,視頻聊天應(yīng)用程序)侦啸。當(dāng) A 想打電話給 B 時(shí)會(huì)發(fā)生什么?

要連接到 B 的應(yīng)用程序丧枪,A 的應(yīng)用程序必須生成 SDP 提議(SdpOffer)光涂。SDP 提議包含有關(guān) A 的應(yīng)用程序要建立的會(huì)話的信息,包括要使用的編解碼器(主流編解碼器:VP8拧烦、9忘闻,H264等)、這是音頻會(huì)話還是視頻會(huì)話等恋博。它還包含 ICE 候選項(xiàng)(IceCandidate)列表齐佳,這些候選項(xiàng)是 B 的應(yīng)用程序可以嘗試用來(lái)連接到 A 的 IP 和端口對(duì)葵蒂。

要構(gòu)建 ICE 候選項(xiàng)列表,A 的應(yīng)用程序向 STUN 服務(wù)器發(fā)出一系列請(qǐng)求重虑。服務(wù)器返回發(fā)起請(qǐng)求的公有 IP 地址和端口對(duì)践付。A 的應(yīng)用程序?qū)⒚總€(gè)對(duì)添加到 ICE 候選項(xiàng)列表中,換句話說(shuō)缺厉,它收集 ICE 候選項(xiàng)永高。一旦 A 的應(yīng)用程序完成收集 ICE 候選項(xiàng),它可以返回 SDP提针。

接下來(lái)命爬,A 的應(yīng)用程序必須通過(guò)這些應(yīng)用程序用于通信的信令通道(SignalingChannel)將 SDP 傳遞給 B 的應(yīng)用程序。WebRTC 標(biāo)準(zhǔn)中未指定用于此交換的傳輸協(xié)議辐脖。它可以通過(guò) HTTPS 執(zhí)行饲宛,安全 WebSocket,或任何其他通信協(xié)議嗜价。

現(xiàn)在艇抠,B 的應(yīng)用程序必須生成 SDP 應(yīng)答(SdpAnswer)。B 的應(yīng)用程序遵循 A 在上一步中使用的相同步驟:收集 ICE 候選項(xiàng)等久锥。然后家淤,B 的應(yīng)用程序需要將此 SDP 應(yīng)答返回給 A 的應(yīng)用程序。

在 A 和 B 交換了 SDP 之后瑟由,他們會(huì)執(zhí)行一系列連接檢查絮重。每個(gè)應(yīng)用程序中的 ICE 算法從它在另一方的 SDP 中收到的列表中獲取候選項(xiàng) IP/端口對(duì),并向其發(fā)送 STUN 請(qǐng)求歹苦。如果從另一個(gè)應(yīng)用程序返回響應(yīng)青伤,發(fā)起方應(yīng)用程序會(huì)認(rèn)為檢查成功,并將該 IP/端口對(duì)標(biāo)記為有效的 ICE 候選項(xiàng)殴瘦。

在所有 IP/端口對(duì)上完成連接性檢查后狠角,應(yīng)用程序協(xié)商并決定使用剩余的有效對(duì)之一。當(dāng)選擇一個(gè)對(duì)時(shí)痴施,媒體開(kāi)始在應(yīng)用程序之間流動(dòng)擎厢。

如果其中一個(gè)應(yīng)用程序找不到通過(guò)了連接性檢查的 IP/端口對(duì),它們將向 TURN 服務(wù)器發(fā)出 STUN 請(qǐng)求以獲取媒體中繼地址辣吃。中繼地址是一種公有 IP 地址和端口动遭,用于將接收的數(shù)據(jù)包轉(zhuǎn)發(fā)到應(yīng)用程序或從應(yīng)用程序中轉(zhuǎn)發(fā)收到的數(shù)據(jù)包,以設(shè)置中繼地址神得。然后厘惦,將該中繼地址添加到候選項(xiàng)列表中,并通過(guò)信令通道進(jìn)行交換。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宵蕉,一起剝皮案震驚了整個(gè)濱河市酝静,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羡玛,老刑警劉巖别智,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異稼稿,居然都是意外死亡薄榛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)让歼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)敞恋,“玉大人,你說(shuō)我怎么就攤上這事谋右∮裁ǎ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵改执,是天一觀的道長(zhǎng)啸蜜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)天梧,這世上最難降的妖魔是什么盔性? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮呢岗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛹尝。我一直安慰自己后豫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布突那。 她就那樣靜靜地躺著挫酿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愕难。 梳的紋絲不亂的頭發(fā)上早龟,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音猫缭,去河邊找鬼葱弟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛猜丹,可吹牛的內(nèi)容都是我干的芝加。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼射窒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼藏杖!你這毒婦竟也來(lái)了将塑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蝌麸,失蹤者是張志新(化名)和其女友劉穎点寥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體来吩,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡开财,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了误褪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片责鳍。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖兽间,靈堂內(nèi)的尸體忽然破棺而出历葛,到底是詐尸還是另有隱情,我是刑警寧澤嘀略,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布恤溶,位于F島的核電站,受9級(jí)特大地震影響帜羊,放射性物質(zhì)發(fā)生泄漏咒程。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一讼育、第九天 我趴在偏房一處隱蔽的房頂上張望帐姻。 院中可真熱鬧,春花似錦奶段、人聲如沸饥瓷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呢铆。三九已至,卻和暖如春蹲缠,著一層夾襖步出監(jiān)牢的瞬間棺克,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工线定, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娜谊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓渔肩,卻偏偏與公主長(zhǎng)得像因俐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容