轉自IMWeb社區,做者:Terrance, 原文連接
<video>
和 <audio>
的媒體流。能夠用MediaSource.isTypeSupported() 判斷是否支持某種MINE類型。在ios Safari中不支持。一、Google力推,已成爲W3C標準html
二、現代瀏覽器支持趨勢,X5也支持(微信、QQ)前端
三、基於UDP,低延遲,弱網抗性強,比flv.js更有優點react
方案 | CPU佔用 | 幀率 | 碼率 | 延時 | 首幀 |
---|---|---|---|---|---|
flv.js | 0.4 | 30 | 700kbit/s | 1.5s | 2s |
WebRTC | 1.9 | 30 | 700kbit/s | 0.7s | 1.5s |
四、支持Web上行能力ios
五、編碼爲H264+OPUSgit
六、提供NAT穿透技術(ICE)github
實際狀況下,當用戶數量很大時,對推流設備的性能要求很高,複雜的權限管理也難以實現,採用P2P的架構基本不可行。對於個別用戶提供上行流、海量用戶只進行拉流的場景,騰訊課堂實現了一種P2S的解決方案。進一步學習可閱讀jaychen的系列文章《WebRTC直播技術》。web
推流url:
小程序
播放url:
segmentfault
下面是我根據官網教程搭建的一個音視頻小程序,搭建過程簡單,同一個局域網下直播體驗也很流暢(讀者也可直接搜索騰訊視頻雲小程序進行體驗):瀏覽器
前端核心代碼仍是至關簡潔的:
live-pusher組件:設置好url推流地址(僅支持 flv, rtmp 格式)等參數便可,使用bindstatechange獲取播放狀態變化
<view id='video-box'>
<live-pusher
id="pusher"
mode="RTC"
url="{{pusher.push_url}}"
autopush='true'
bindstatechange="onPush">
</live-pusher>
</view>
複製代碼
live-player組件:設置後src音視頻地址(僅支持 flv, rtmp 格式)等參數便可,使用bindstatechange獲取播放狀態變化
<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同時使用?
對於騰訊課堂的應用場景,老師上課推流採用的是RTMP協議,考慮到WebRTC目前只能用於PC端拉流,那麼在移動端可否讓用戶能夠直接經過小程序來觀看直播課呢?我以爲在技術層面可行的,接入小程序直播對於擴大平臺影響力、社交圈分享、提升收費轉化都會產生很大的幫助。難點在於複雜的權限控制、多路音視頻流、多人連麥等問題,好比權限控制只能單獨放到房間控制邏輯中完成,而音視頻流自己缺少這種校驗;主輔路的切換還須要添加單獨的信令控制,同時在小程序中加入相應的判斷邏輯。