转自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端拉流,那么在移动端可否让用户能够直接经过小程序来观看直播课呢?我以为在技术层面可行的,接入小程序直播对于扩大平台影响力、社交圈分享、提升收费转化都会产生很大的帮助。难点在于复杂的权限控制、多路音视频流、多人连麦等问题,好比权限控制只能单独放到房间控制逻辑中完成,而音视频流自己缺少这种校验;主辅路的切换还须要添加单独的信令控制,同时在小程序中加入相应的判断逻辑。