基于libopenh264 codec的svc分层流实现方案

OpenH264 http://www.openh264.org/ 是标准的H.264 encoder/decoder. ffmpeg已经集成libopenh264,但不支持svc特性。

openh264 encoder支持svc特性:

  1. 时域4层:Temporal scalability up to 4 layers in a dyadic hierarchy

  2. 空域4层:Spatial simulcast up to 4 resolutions from a single input

Temporal scalability指的是FPS,定义为:{30,24,16,10};

Spatial simulcast指的是分辨率,定义为:

int arrHorW[]={1920, 1280, 800, 640 };

int arrHorH[]={1080, 720, 450, 360 };

通过组合,最多可以组合成16种码流。由软件出16个encoding pipeline来实现。

对于传输,用RTP协议。参考RFC6190: https://datatracker.ietf.org/doc/html/rfc6190#section-1.1.3

不同流用虚连接区分,NALU type上区分layers: dependency_id(DID) + temporal_id(TID) + quality_id(QID).

+---------------+---------------+---------------+

|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|R|I| PRID |N| DID | QID | TID |U|D|O| RR|

+---------------+---------------+---------------+

svcRtpSvr解析NALU packet。按dependency_id + temporal_id构建16个queue分别进行buffering。audio单独一个buffer。

为了缩短首帧加载时间,需要按dependency_id缓冲一个I-frame。

参考w3c标准(scalabilityMode表),对layers进行编码,共16个layer。

"S0T0", "S0T1", "S0T2", "S0T3" "S1T0", "S1T1", "S1T2", "S1T3"

"S2T0", "S2T1", "S2T2", "S2T3" "S3T0", "S3T1", "S3T2", "S3T3"

各个不同client的svcPlayer根据网络质量/buffering长度,自行决定要拉哪些layer,主动向svcMediaSvr发出请求。

比如,刚开始播放时,尝试获取3s标清base layer S0T2进行播放,播放流畅的话,就尝试获取S1T2进行叠加图像效果。3s播放仍然流畅,继续获取S2T2和S3T2进行高画质叠加。

player需要不断测试网络带宽,根据网络带宽的80%来计算应该在哪个layer上进行播放为佳。

相关推荐
EasyNVR2 天前
EasyRTC智能硬件:小体积,大能量,开启音视频互动新体验
前端·安全·音视频·webrtc·sdk·p2p·智能硬件
科技小E3 天前
WebRTC与EasyRTC:开启智能硬件音视频通讯的全新旅程
网络·网络协议·音视频·webrtc·p2p·视频监控
cyw89983 天前
vue3读取webrtc-stream 视频流
webrtc
Likeadust4 天前
WebP2P+自研回音消除:视频通话SDK嵌入式EasyRTC构建高交互性音视频应用
音视频·webrtc·p2p·webp2p
EasyGBS5 天前
EasyRTC嵌入式WebRTC视频通话SDK支持Web浏览器、Linux、ARM、Android、iOS
arm开发·音视频·webrtc·webp2p
xiejiashu5 天前
嵌入式EasyRTC实时通话支持海思hi3516cv610,编译器arm-v01c02-linux-musleabi-gcc
webrtc·webrtc嵌入式·嵌入式webrtc·硬件视频通话·嵌入式视频通话
EasyNVR5 天前
WebRTC与EasyRTC:开启智能硬件音视频通讯的全新旅程
网络·安全·音视频·webrtc·智能硬件·视频监控
william_myq8 天前
协议-WebRTC-HLS
音频·webrtc·hls
sun_weitao8 天前
flutter-webrtc安装示例
flutter·webrtc
爱学习的大牛12311 天前
WebRTC 客户端与ZLMediaKit通讯
webrtc·zlmediakit