码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于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上进行播放为佳。
     

  • 相关阅读:
    假期AI新闻热点:亚运会Al技术亮点;微软GPT-4V论文精读;Perplexity推出pplx-api;DALL-E 3多渠道测评 | ShowMeAI日报
    Liunx中系统安全及文件系统(极其粗糙版)
    好奇一下各个大模型对华为mate60系列的看法
    Qt Creator在新项目中提示众多报错,但代码编译正常
    CSS基础入门
    mysql8 修改用户密码
    基于扩频技术的MPEG-2视频水印算法matlab仿真
    智慧社区解决方案的服务形式有哪些
    Hugging News #0407: Google AI 的 Pix2Struct 来啦、开发者资源页面发布
    51单片机简易时钟闹钟八位数码管显示仿真( proteus仿真+程序+原理图+报告+讲解视频)
  • 原文地址:https://blog.csdn.net/freeman1975/article/details/134226457
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号