Real-time Transpo
rt P
rotocol,IETF于1996提出的一個標(biāo)準(zhǔn)
1、Google力推,已成為W3C標(biāo)準(zhǔn)
2、現(xiàn)代瀏覽器支持趨勢,X5也支持(微信、QQ)
3、基于UDP,低延遲,弱網(wǎng)抗性強(qiáng),比flv.js更有優(yōu)勢
4、支持Web上行能力
5、編碼為H264+OPUS
6、提供NAT穿透技術(shù)(ICE)
實際情況下,當(dāng)用戶數(shù)量很大時,對推流設(shè)備的性能要求很高,復(fù)雜的權(quán)限管理也難以實現(xiàn),采用P2P的架構(gòu)基本不可行。對于個別用戶提供上行流、海量用戶只進(jìn)行拉流的場景,騰訊課堂實現(xiàn)了一種P2S的解決方案。 進(jìn)一步學(xué)習(xí)可閱讀jaychen的系列文章《WebRTC直播技術(shù)》。
推流url:
播放url:
下面是我根據(jù)官網(wǎng)教程搭建的一個音視頻小程序,搭建過程簡單,同一個局域網(wǎng)下直播體驗也很流暢(讀者也可直接搜索 騰訊視頻云 小程序進(jìn)行體驗):
前端核心代碼還是相當(dāng)簡潔的:
live-pusher組件:設(shè)置好url推流地址(僅支持 flv, rtmp 格式)等參數(shù)即可,使用bindstatechange獲取播放狀態(tài)變化
復(fù)制代碼 <view id='video-box'> <live-pusher id="pusher" mode="RTC" url="{{pusher.push_url}}" autopush='true' bindstatechange="onPush"> </live-pusher> </view> |
live-player組件:設(shè)置后src音視頻地址(僅支持 flv, rtmp 格式)等參數(shù)即可,使用bindstatechange獲取播放狀態(tài)變化
<view id='video-box'> <live-player wx:for="{{player}}" id="player_{{index}}" mode="RTC" object-fit="fillCrop" src="{{item.playUrl}}" autoplay='true' bindstatechange="onPlay"> </live-player> </view> |
能否和WebRTC同時使用?
對于騰訊課堂的應(yīng)用場景,老師上課推流采用的是RTMP協(xié)議,考慮到WebRTC目前只能用于PC端拉流,那么在移動端能否讓用戶可以直接通過小程序來觀看直播課呢?我覺得在技術(shù)層面可行的,接入小程序直播對于擴(kuò)大平臺影響力、社交圈分享、提高收費轉(zhuǎn)化都會產(chǎn)生很大的幫助。難點在于復(fù)雜的權(quán)限控制、多路音視頻流、多人連麥等問題,比如權(quán)限控制只能單獨放到房間控制邏輯中完成,而音視頻流本身缺乏這種校驗;主輔路的切換還需要添加單獨的信令控制,同時在小程序中加入相應(yīng)的判斷邏輯。