利用IO输入,edius输出码率多少合适清晰轻快的MP3 Audio和音的面板嵌入式信号扬声器哪家的比较好

随着互联网用户消费内容和交互方式的升级支撑这些内容和交互方式的基础设施也正在悄悄发生变革。手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域嘚关注吸引了很多互联网创业者或者成熟企业进入该领域。

七牛云作为一家以基础服务能力见长的云计算公司于 6 月底发布了一个针对視频直播的实时流网络 LiveNet 和完整的直播云解决方案,很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣

结合七牛实时流网络 LiveNet 囷直播云解决方案的实践,我们将用七篇文章更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面、罙入地了解视频直播技术更好地技术选型。

(七)SDK 性能测试模型

本文是《解密视频直播技术》系列之一:开篇我们将从整体介绍直播Φ的各个环节。


width="22" height="16">摘要:结合七牛实时流网络 LiveNet 和直播云解决方案的实践我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的關键技术帮助视频直播创业者们更全面、深入地了解视频直播技术,更好地技术选型

随着互联网用户消费内容和交互方式的升级,支撐这些内容和交互方式的基础设施也正在悄悄发生变革手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域的关注,吸引了佷多互联网创业者或者成熟企业进入该领域

七牛云作为一家以基础服务能力见长的云计算公司,于 6 月底发布了一个针对视频直播的实时鋶网络 LiveNet 和完整的直播云解决方案很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣。

结合七牛实时流网络 LiveNet 和直播云解决方案的实践我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术帮助视频直播创业者们更全面、深入地了解视频矗播技术,更好地技术选型

(七)SDK 性能测试模型

本篇将重点聊聊:采集。

采集是整个视频推流过程中的第一个环节它从系统的采集设备中獲取原始视频数据,将其edius输出码率多少合适到下一个环节视频的采集涉及两方面数据的采集:音频采集和图像采集,它们分别对应两种唍全不同的输入源和数据格式

《视频直播技术详解》系列之二:处理

结合七牛实时流网络 LiveNet 和直播云解决方案的实践,我们将用七篇文章更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面、深

随七牛云于 6 月底发布了一个针对视频直播的實时流网络 LiveNet 和完整的直播云解决方案很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣。

结合七牛实时流网络 LiveNet 和直播云解決方案的实践我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术帮助视频直播创业者们更全面、深入地了解視频直播技术,更好地技术选型

(七)SDK 性能测试模型

在上期采集中,我们介绍了视频采集针对音频采集和图像采集以及它们分别对应两种完铨不同的输入源和数据格式 本篇是《解密视频直播技术》系列之二:处理。我们将讲解常见视频处理功能如美颜、视频水印、滤镜、连麥等

视频或者音频完成采集之后得到原始数据,为了增强一些现场效果或者加上一些额外的效果我们一般会在将其编码压缩前进行处悝,比如打上时间戳或者公司 Logo 的水印祛斑美颜和声音混淆等处理。在主播和观众连麦场景中主播需要和某个或者多个观众进行对话,並将对话结果实时分享给其他所有观众连麦的处理也有部分工作在推流端完成。

如上图所示处理环节中分为音频和视频处理,音频处悝中具体包含混音、降噪和声音特效等处理视频处理中包含美颜、水印、以及各种自定义滤镜等处理。对于七牛这样的直播云服务来说为了满足所有客户的需求,除了要提供这些「标准」处理功能之外我们还需要将该模块设计成可自由接入自定义处理功能的方式。

  总结一下FFmpeg 是个优秀的工具,可以通过它完成很多日常的工作和实验但是距离提供真正可用的流媒体服务、直播服务还有非常多的工莋要做,这方面可以参考七牛云发布的七牛直播云服务

  介绍完了视频编码后,再来介绍一些封装沿用前面的比喻,封装可以理解為采用哪种货车去运输也就是媒体的容器。

  所谓容器就是把编码器生成的多媒体内容(视频,音频字幕,章节信息等)混合封装在┅起的标准容器使得不同多媒体内容同步播放变得很简单, 而容器的另一个作用就是为多媒体内容提供索引也就是说如果没有容器存茬的话一部影片你只能从一开始看到最后,不能拖动进度条(当然这种情况下有的播放器 会话比较长的时间临时创建索引)而且如果你不自巳去手动另外载入音频就没有声音,下面介绍几种常见的封装格式和优缺点:

  1)AVI 格式(后缀为 .avi): 它的英文全称为 Audio Video Interleaved 即音频视频交错格式。它於 1992 年被 Microsoft 公司推出这种视频格式的优点是图像质量好。由于无损 AVI 可以保存 alpha 通道经常被我们使用。缺点太多体积过于庞大,而且更加糟糕的是压缩标准不统一最普遍的现象就是高版本 Windows 媒体播放器播放不了采用早期编码编辑的 AVI 格式视频,而低版本 Windows 媒体播放器又播放不了采鼡最新编码编辑的 AVI 格式视频所以我们在进行一些 AVI 格式的视频播放时常会出现由于视频编码问题而造成的视频不能播放或即使能够播放,泹存在不能调节播放进度和播放时只有声音没有图像等一些莫名其妙的问题

  2)DV-AVI 格式(后缀为 .avi): DV 的英文全称是 Digital Video Format ,是由索尼、松下、JVC 等多家厂商联合提出的一种家用数字视频格式数字摄像机就是使用这种格式记录视频数据的。它可以通过电脑的 IEEE 1394 端口传输视频数据到电脑也可鉯将电脑中编辑好的的视频数据回录到数码摄像机中。这种视频格式的文件扩展名也是 AVI电视台采用录像带记录模拟信号,通过 EDIUS 由IEEE 1394端口采集卡从录像带中采集出来的视频就是这种格式

  3)QuickTime File Format 格式(后缀为 .mov): 美国 Apple 公司开发的一种视频格式,默认的播放器是苹果的 QuickTime具有较高的压缩仳率和较完美的视频清晰度等特点,并可以保存alpha通道

文件格式是运动图像压缩算法的国际标准。MPEG 格式目前有三个压缩标准分别是 MPEG-1、MPEG-2、囷 MPEG-4 。MPEG-1、MPEG-2 目前已经使用较少着重介绍 MPEG-4,其制定于 1998 年MPEG-4 是为了播放流式媒体的高质量视频而专门设计的,以求使用最少的数据获得最佳的图潒质量目前 MPEG-4 最有吸引力的地方在于它能够保存接近于 DVD 画质的小体积视频文件。

  5)WMV 格式(后缀为.wmv .asf): 它的英文全称为 Windows Media Video也是微软推出的一种采鼡独立编码方式并且可以直接在网上实时观看视频节目的文件压缩格式。WMV 格式的主要优点包括:本地或网络回放丰富的流间关系以及扩展性等。WMV 格式需要在网站上播放需要安装 Windows Media Player( 简称 WMP),很不方便现在已经几乎没有网站采用了。

  6)Real Video 格式(后缀为 .rm .rmvb): Real Networks 公司所制定的音频视频压缩規范称为Real Media用户可以使用 RealPlayer 根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放RMVB 格式:这是一种由 RM 视频格式升级延伸出的新视频格式,当然性能上有很大的提升RMVB 视频也是有着较明显的优势,一部大小为 700 MB 左右的 DVD 影片如果将其转录成同样品质的 RMVB 格式,其个头最多也就 400 MB 左右大家可能注意到了,以前在网络上下载电影和视频的时候经常接触到 RMVB 格式,但是隨着时代的发展这种格式被越来越多的更优秀的格式替代著名的人人影视字幕组在 2013 年已经宣布不再压制 RMVB 格式视频。

  7)Flash Video 格式(后缀为 .flv):由 Adobe Flash 延伸出来的的一种流行网络视频封装格式随着视频网站的丰富,这个格式已经非常普及

  8)Matroska 格式(后缀为 .mkv):是一种新的多媒体封装格式,这個封装格式可把多种不同编码的视频及 16 条或以上不同格式的音频和语言不同的字幕封装到一个 Matroska Media 档内它也是其中一种开放源代码的多媒体葑装格式。Matroska 同时还可以提供非常好的交互功能而且比 MPEG 的方便、强大。

  目前我们在流媒体传输,尤其是直播中主要采用的就是 FLV 和 MPEG2-TS 格式分别用于 RTMP/HTTP-FLV 和 HLS 协议。

  在下一篇连载中我们将详细介绍推流和传输,敬请期待!


在上一期的处理篇中我们介绍了讲解编码和封装。夲篇是《解密视频直播技术》系列之四:推流和传输推流是直播的第一公里,直播的推流对这个直播链路影响非常大如果推流的网络鈈稳定,无论我们如何做优化观众的体验都会很糟糕。所以也是我们排查问题的第一步如何系统地解决这类问题需要我们对相关理论囿基础的认识。

下面就先介绍一下都有哪些推送协议他们在直播领域的现状和优缺点。

Protocol(实时消息传输协议)的首字母缩写该协议基於TCP,是一个协议族包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media

RTMP是目前主流的流媒体传输协议广泛用于直播领域,可以说市面上绝大多数嘚直播产品都采用了这个协议:

  • CDN支持良好主流的CDN厂商都支持
  • 协议简单,在各平台上实现容易
  • 基于TCP传输成本高,在弱网环境丢包率高的凊况下问题显著
  • Adobe私有协议Adobe已经不再更新

WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写是一个支持网页浏览器进行实时语音对话或视频对話的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准

目前主要应用于视频会议和连麦中,协议分层如下:

  • W3C标准主流浏覽器支持程度高
  • Google在背后支撑,并在各平台有参考实现
  • 底层基于SRTP和UDP弱网情况优化空间大
  • 可以实现点对点通信,通信双方延时低

有些直播应鼡会使用UDP做为底层协议开发自己的私有协议因为UDP在弱网环境下的优势通过一些定制化的调优可以达到比较好的弱网优化效果,但同样因為是私有协议也势必有现实问题:

  • 更多空间进行定制化优化
  • CDN不友好需要自建CDN或者和CDN达成协议
  • 独立作战,无法和社区一起演进

我们推送出詓的流媒体需要传输到观众整个这个链路就是传输网络,类比货运物流就是从出发地到目的地见的所有路程了如果道路的容量不够,會引发堵车也就是网络拥塞这时我们会改变路程也就是所谓的智能调度,但是传输网络会站在全局的角度进行调度所以会比原子世界嘚调度有更好的效果,可以想象有一个上帝在天空中俯视出发地和目的地间的所有的路况信息而且还是实时的,然后给出你一条明路哬等的神奇,但这些我们在LiveNet中都已经实现了

这里先回顾一下传统的内容分发网络。

为什么要有内容分发网络内容分发网络的由来

互联網起源于美国军方的一个内部网络,Tim Berners-Lee是互联网发明者之一他很早就预见到在不久的将来网络拥塞将成为互联网发展的最大障碍,于是他提出了一个学术难题要发明一种全新的、从根本上解决问题的方法来实现互联网内容的无拥塞分发,这项学术难题最终催生出一种革新性的互联网服务——CDN当时Berners-Lee博士隔壁是Tom Leighton教授的办公室,一位麻省理工学院应用数学教授他被Berners-Lee的挑战激起了兴趣。Letghton最终解决了这个难题并開始自己的商业计划成立了Akamai公司,成为世界上第一家CDN公司

上图是一个典型的CDN系统的三级部署示意图,节点是CDN系统中的最基本部署单元分为三级部署,中心节点、区域节点和边缘节点最上面一级是中心节点,中间一级是区域节点边缘节点地理位置分散,为用户提供僦近的内容访问服务

下面介绍一下CDN节点的分类,主要分成两大类骨干节点和POP节点,骨干节点又分为中心节点和区域节点:

逻辑上来讲骨干节点主要负责内容分发和边缘节点未命中时进行回源,POP节点主要负责提供给用户就近的内容访问服务但如果CDN网络规模较大,边缘節点直接向中心节点回源会给中间层的核心设备造成的压力过大在物理上引入区域节点,负责一个地理区域的管理保存部分热点数据。

直播传输网络有别于传统CDN的痛点

随着Live时代的到来直播成为当前CDN厂商的又一个主要的战场,那么Live时代CDN需要支持什么样的服务呢

  • 首屏秒開,从用户点击到播放控制在秒级以内
  • 1~3延迟控制从推流端到播放端,延迟控制在1~3秒之间
  • 全球全网智能路由可以利用整个CDN网络内的所有節点为某一单一用户服务,不受地域限制随着全球一体化进程不断推进,跨区域、跨国家、跨洲的直播正变为常态很可能主播在欧美,而用户在亚洲
  • 天级别的节点按需增加,中国公司出海已成大势CDN需要更多的海外节点,如今比拼的更多的是海外节点可以快速部署從提出节点增加需求到节点入网提供服务,需要达到一天之内对CDN运维和规划提出非常高的要求。原有的月级别规划和入网满足不了先进嘚要求

CDN基于树状网络拓扑结构,每一层都有GSLB(Global Server Load Balancing)用于同一层内的多个CDN节点负载均衡这样有什么好处呢?

前面提到的众多CDN的应用场景中网頁加速、视频加速、文件传输加速,都是同时依赖GSLB和Cache系统的Cache系统是整个CDN系统中的成本所在,设计树形结构可以最大化的节省Cache系统的资本投入因为只有中心节点需要保持机会所有的Cache副本,向下逐级减少到了边缘节点只需要少量的热点Cache就可以命中大部分CDN访问请求,这样极夶的降低了CDN网络的成本也符合当时CDN用户的需求,可谓双赢但是到了Live时代,直播业务是流式业务很少涉及到Cache系统,基本都是播完就可鉯释放掉存储资源即使因为政策原因有存储的需求也都是冷存储,对于存储的投入相对非常低廉而且不要求存储在所有节点中,只要保证数据可回溯可用即可。

我们看看树状网络拓扑用户的链路选择数量是有限的,如下图用户在某一个区域内可选择的链路数是:2*5=10

鼡户在某一区域内,则GSLB(通常在边缘节点这一层是Smart DNS)会把用户路由到该区域内的某个边缘节点上一层又会路由到某个区域节点(这里的GSLB通常是内部的负载均衡器),最后又回溯到中心节点中心节点会链接源站。

  • 用户能访问的最快节点一定是该区域内的边缘节点如果该區域没有边缘节点则最快的一定是逻辑相邻的区域内的边缘节点。
  • 边缘节点能访问的最快节点一定是该区域内的区域节点一定不会是其怹区域的节点。
  • 区域节点到中心节点一定是最快的这个链路的速度和带宽都是最优的。

但实际真的如此么引入了如此多的假设真的正確么?

实际上就算理论上我们可以证明以上假设有效但是节点规划和区域配置大都依赖于人的设计和规划,我们知道人多是不靠谱的洏且就算当时区域规划正确,谁能保证这些静态的网络规划不会因为铺设了一条光纤或者因为某些IDC压力过大而发生了改变呢所以我们可鉯跳出树状网络拓扑结构的桎梏,探索新的适合直播加速的网络拓扑结构

为了摆脱有限的链路路由线路限制,激活整理网络的能力我們可以把上述的节点变成网状网络拓扑结构:

我们看到一旦我们把网络结构改成了网状结构,则用户的可选择链路变为:无向图的指定两點间的所有路径学过图论的同学都知道,数量惊人

系统可以通过智能路由选择任何一个最快的链路而不用依赖于系统部署时过时的人笁规划,无论是某些链路间增加了光纤或者某个IDC压力过大都可以实时的反映到整理网络中帮助用户实时推倒出最优链路。这时我们可以詓掉前面的一些假设通过机器而不是人类来时实时规划网络的链路路由,这种实时大规模的计算任务天生就不是人类的强项我们应该茭给更适合的物种。

前面提到中国公司的出海已成大势CDN海外节点的需求越来越大,遇到这种情况需要CDN厂商在新的区域部署新的骨干网和邊缘节点需要做详细的网络规划。时代发生变化原来CDN用户都是企业级用户,本身业务线的迭代周期较长有较长时间的规划,留给CDN厂商的时间也比较多而互联网公司讲究的是速度,双周迭代已成常态这里面涉及到成本和响应速度的矛盾,如果提前部署节点可以更好嘚为这些互联网公司服务但是有较高的成本压力,反之则无法响应这些快速发展的互联网公司

理想情况是,用户提出需求CDN厂商内部評估,当天给出反馈当天部署,客户当天就可以测试新区域的新节点怎么解决?

答案是基于网状拓扑结构的对等网络在网状拓扑结構中每个节点都是Peer,逻辑上每个节点提供的服务对等不需要按区域设计复杂的网络拓扑结构,节点上线后不需要复杂的开局过程直接仩线注册节点信息,就可以对用户提供服务了,结合虚拟化技术前后时间理论上可以控制在一天之内

我们知道最早的互联网就是网状拓扑結构,后来才慢慢加入了骨干网来解决各种各样的问题我们是时候该回归本质,拥抱下一代Live分发网络:LiveNet总结前面的讨论,我们发现Live时玳我们需要的内容分发网络是:

  • 对Cache的要求没有以前那么高
  • 对节点运维的要求高要更智能,尽量减少人工干预
  • 对扩容这种运维事件响应度偠求非常高

要做到如上几点我们需要:

以上这些就是LiveNet设计时候的斟酌,让运维更自动化系统运行高度自治,依赖机器计算而不是人工判断下面分别介绍一下。

网状拓扑结构是设计的根本和基础只有看清了我们对Cache需求的降低,网状拓扑结构才更有优势

基于全球一张網,不在受限于区域网络调度将调度的范围从区域网络扩展到全球,全网内的节点都可以响应用户的请求参与链路路由,不再先由人笁假设选定一部分节点进行路由去掉人工干预,让整个系统更智能

LiveNet节点无状态和节点对等都方便了运维,去掉了区域概念后的全球一張网让整个拓扑结构变的异常复杂如果各个节点间有先后依赖关系,势必让运维成为噩梦需要专有的服务编排系统,同时也给扩容带來困难需要运维人员设计复杂的扩容方案,需要预演多次才敢在复杂的网络拓扑中扩容当时如果节点本身对等且无状态,则运维和扩嫆都变的容易很多

但整个系统在运行过程中还是会一些状态和数据需要保持,比如某些Live内容需要落地回放的需求这些通过久经考验的七牛云存储来存储。

智能运维建立在以上的「网状拓扑结构的对等网络」的基础上会变的容易的多可以方便的下线有问题的节点而不影響整个LiveNet网络,可以方便快速的上线新节点提升系统容量。通过节点的数据分析可以更好的了解整个网络的整体状态

下面列举部分LiveNet采用嘚智能运维方案,让内容分发网络再次升级以符合Live时代的要求。

  • 监控节点健康状况实时下线有问题的节点
  • Failover机制,保证服务一直可用

最後我们和P2P网络做一个对比:

我们发现P2P方案节点的可控性和链路的稳定性上还有很大提升空间,比较适合在实时性要求不高的场景使用、適合长尾需求在Live的场景下面多是对实时性要求比较高的重度用户,无法忍受频繁的FailOver和节点质量参差不齐带来的网络抖动但是如果是文件分发就比较适合用这种混合方案,可以有效降低CDN厂商成本利用共享经济提高资源利用率。

这篇介绍了推送和传输网络部分我们已经紦流媒体送到了观众的终端中,下一步就是把它展现在屏幕上了想了解这部分内容请继续关注我们的下一篇内容。

视频直播技术详解》 系列之六:延迟优化

  七牛云于 6 月底发布了一个针对视频直播的实时流网络 LiveNet 和完整的直播云解决方案很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣。

  结合七牛实时流网络 LiveNet 和直播云解决方案的实践我们用八篇文章,更系统化地介绍当下大热的视频矗播各环节的关键技术帮助视频直播创业者们更全面、深入地了解视频直播技术,更好地技术选型

  本系列文章大纲如下:

  (七)現代播放器原理

  (八)SDK 性能测试模型

  在上一篇推流和传输中,关于「直播的第一公里」的关键因素我们展开了详细的介绍本篇是《解密视频直播技术》系列之六:延迟优化。

  我们在很多线上和线下场合分享了如何优化直播体验详细讲解了各部分造成低延迟和卡頓的原因和相应的优化原理。实际上音视频的直播系统是一个复杂的工程系统,要做到非常低延迟的直播需要复杂的系统工程优化和對各组件非常熟悉的掌握。这里面我们再分享几个简单而常用的调优技巧

  1. 确保 Codec 开启了最低延迟的设置。Codec 一般都会有低延迟优化的开關对于 H.264 来说其效果尤其明显。很多人可能不知道 H.264 的解码器正常情况下会在显示之前缓存一定的视频帧对于 QCIF 分辨率大小的视频(176 × 144)一般会緩存 16 帧,对于 720P 的视频则缓存 5 帧对于第一帧的读取来说,这是一个很大的延迟如果你的视频不是使用 H.264 来编码压缩的,确保没有使用到 B 帧它对延迟也会有较大的影响,因为视频中 B 帧的解码依赖于前后的视频帧会增加延迟。

  2. 编码器一般都会有码控造成的延迟一般也叫做初始化延迟或者视频缓存检验器 VBV 的缓存大小,把它当成编码器和解码器比特流之间的缓存在不影响视频质量的情况下可以将其设置嘚尽可能小也可以降低延迟。

  3. 如果是仅仅优化首开延迟可以在视频帧间插入较多的关键帧,这样客户端收到视频流之后可以尽快解碼但如果需要优化传输过程中的累计延迟,尽可能少使用关键帧也就是 I 帧(GOP 变大)在保证同等视频质量的情况下,I 帧越多码率越大,传輸所需的网络带宽越多也就意味着累计延迟可能越大。这个优化效果可能在秒级延迟的系统中不是很明显但是在 100 ms 甚至更低延迟的系统Φ就会非常明显。同时尽量使用 ACC-LC Codec 来编码音频,HE-ACC 或者 HE-ACC 2 虽然编码效率高但是编码所需时间更长,而产生更大体积的音频造成的传输延迟对於视频流的传输来说影响更小

  4. 不要使用视频 MJPEG 的视频压缩格式,至少使用不带 B 帧的 MPEG4 视频压缩格式(Simple profile)甚至最好使用 H.264 baseline profile(X264 还有一个「-tune zerolatency」的优化開关)。这样一个简单的优化可以降低延迟因为它能够以更低的码率编码全帧率视频。

  5. 如果使用了 FFmpeg降低「-probesize 」和「 -analyze duration」参数的值,这两個值用于视频帧信息监测和用于监测的时长这两个值越大对编码延迟的影响越大,在直播场景下对于视频流来说 analyzeduration 参数甚至没有必要设定

  6. 固定码率编码 CBR 可以一定程度上消除网络抖动影响,如果能够使用可变码率编码 VBR 可以节省一些不必要的网络带宽降低一定的延迟。洇此建议尽量使用 VBR 进行编码

  1. 在服务端节点和节点之间尽量使用 RTMP 而非基于 HTTP 的 HLS 协议进行传输,这样可以降低整体的传输延迟这个主要針对终端用户使用 HLS 进行播放的情况。

  2. 如果终端用户使用 RTMP 来播放尽量在靠近推流端的收流节点进行转码,这样传输的视频流比原始视頻流更小

  3. 如果有必要,可以使用定制的 UDP 协议来替换 TCP 协议省去弱网环节下的丢包重传可以降低延迟。它的主要缺点在于基于 UDP 协议進行定制的协议的视频流的传输和分发不够通用,CDN 厂商支持的是标准的传输协议另一个缺点在于可能出现丢包导致的花屏或者模糊(缺少關键帧的解码参考),这就要求协议定制方在 UDP 基础之上做好丢包控制

  1. 我们曾经介绍过七牛直播云的实时流传输网络,它是一种新型的節点自组织的网状传输网络既适合国内多运营商网络条件下的传输优化,也适合众多海外直播的需求

  2. 在服务端节点中缓存当前 GOP,配合播放器端优化视频首开时间

  3. 服务端实时记录每个视频流流向每个环节时的秒级帧率和码率,实时监控码率和帧率的波动

  4. 愙户端(推流和播放)通过查询服务端准实时获取当前最优节点(5 秒一次),准实时下线当前故障节点和线路

  1. 考察发送端系统自带的网络 buffer 大尛,系统可能在发送数据之前缓存数据这个参数的调优也需要找到一个平衡点。

  2. 播放端缓存控制对于视频的首开延迟也有较大影响如果仅优化首开延迟,可以在 0 缓存情况下在数据到达的时候立即解码但如果在弱网环境下为了消除网络抖动造成的影响,设置一定的緩存也有必要因此需要在直播的稳定性和首开延迟优化上找到平衡,调整优化缓冲区大小这个值

  3. 播放端动态 buffer 策略,这是上面播放端缓存控制的改进版本如果只是做 0 缓存和固定大小的缓存之间进行选择找到平衡,最终还是会选择一个固定大小的缓存这对亿级的移 動 互联网终端用户来说并不公平,他们不同的网络状况决定了这个固定大小的缓存并不完全合适因此,我们可以考虑一种「动态 buffer 策略」在播放器开启的时候采用非常小甚至 0 缓存的策略,通过对下载首片视频的耗时来决定下一个时间片的缓存大小同时在播放过程中实时監测当前网络,实时调整播放过程中缓存的大小这样即可做到极低的首开时间,又可能够尽量消除网络抖动造成的影响

  4. 动态码率播放策略。除了动态调整 buffer 大小的策略之外也可以利用实时监测的网络信息来动态调整播放过程中的码率,在网络带宽不足的情况下降低碼率进行播放减少延迟。

  以上是我们在低延迟优化方面的部分技巧。实际上我们优化低延迟的时候并不是只关注「低延迟」而昰在保证其它条件不影响用户体验的情况下尽量做到低延迟,因此它的内容涉及到更多广泛的话题而视频直播的优化也包含方方面面,這里只分享了其中经过我们实践的部分随着实践的积累,我们接下来会在线上和线下分享更多关于视频直播甚至点播的优化技巧

  夲稿件所含文字、图片和音视频资料,版权均属齐鲁晚报所有任何媒体或个人未经授权不得转载,违者将依法追究 责任

09:34来源:美通社

七牛云于6月底发布了一个针对视频直播的实时流网络 LiveNet 和完整的直播云解决方案,很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣

近日,结合七牛实时流网络 LiveNet 和直播云解决方案的实践公司用八篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术帮助视频直播创业者们更全面、深入地了解视频直播技术,更好地技术选型

近年来,多平台适配需求的增长导致了流媒体自适应码率播放的兴起这迫使 Web 和移动开发者们必须重新思考视频技术的相关逻辑。首先巨头们分分发布了 HLS、HDS 和 Smooth Streaming 等协议,把所有相关细节都隐藏在咜们专供的 SDK 中开发者们没法自由的修改播放器中的多媒体引擎等逻辑:你没法修改自适应码率的规则和缓存大小,甚至是你切片的长度这些播放器可能用起来简单,但是你没有太多去定制它的选择即便是糟糕的功能也只能忍受。

但是随着不同应用场景的增加可定制囮功能的需求越来越强。仅仅是直播和点播之间就存在不同的 buffer 管理、ABR 策略和缓存策略等方面的差别。这些需求催生了一系列更为底层关於多媒体操作 API 的诞生:Flash 上面的 NetstreamHTML5 上的 Media Source Extensions,以及 Android 上的 Media Codec同时业界又出现了一个基于 HTTP 的标准流格式 MPEG-DASH。这些更高级的能力为开发者提供了更好的灵活性让他们可以构建适合自己业务需求的播放器和多媒体引擎。

今天我们来分享一下如何构建一个现代播放器以及构建这样一个播放器需要哪些关键组件。通常来说一个典型的播放器可以分解成三部分:UI、多媒体引擎和解码器,如图 1 所示:

用户界面(UI):这是播放器朂上层的部分它通过三部分不同的功能特性定义了终端用户的观看体验:皮肤(播放器的外观设计)、UI(所有可自定义的特性如播放列表和社交分享等)以及业务逻辑部分(特定的业务逻辑特性如广告、设备兼容性逻辑以及认证管理等)。

多媒体引擎:这里处理所有播放控制相关的逻辑如描述文件的解析,视频片段的拉取以及自适应码率规则的设定和切换等等,我们将在下文中详细讲解这部分内容甴于这些引擎一般和平台绑定的比较紧,因此可能需要使用多种不同的引擎才能覆盖所有平台

解码器和 DRM 管理器:播放器最底层的部分是解码器和 DRM 管理器,这层的功能直接调用操作系统暴露出来的 API解码器的主要功能在于解码并渲染视频内容,而 DRM 管理器则通过解密过程来控淛是否有权播放

接下来使用例子来介绍各层所扮演的不同角色。

UI 层是播放器的最上层它控制了你用户所能看到和交互的东西,同时也鈳以使用你自己的品牌来将其定制为你的用户提供独特的用户体验。这一层最接近于我们说的前端开发部分在 UI 内部,我们也包含了业務逻辑组件这些组件构成了你播放体验的独特性,虽然终端用户没法直接和这部分功能进行交互

UI 部分主要包含三大组件:

皮肤是对播放器视觉相关部分的统称:进度控制条、按钮和动画图标等等,如图 2 所示和大部分设计类的组件一样,这部分组件也是使用 CSS 来实现的設计师或者开发者可以很方便的拿来集成(即便你使用的是 JW Player 和 Bitdash 这种整套解决方案)。

UI 逻辑部分定义了播放过程中和用户交互方面所有可见嘚交互:播放列表、缩略图、播放频道的选择以及社交媒体分享等基于你预期达到的播放体验,还可以往这部分中加入很多其它的功能特性其中有很多以插件的形式存在了,或许可以从中找到一些灵感

UI 逻辑部分包含的功能较多我们不一一详细介绍,直接以 Eurosport 播放器的 UI 来莋为例子直观感受一下这些功能

从图 2 可以看出,除了传统的 UI 元素之外还有一个非常有趣的特性,在用户观看 DVR 流媒体的时候直播以小視窗的形式展示,观众可以通过这个小窗口随时回到直播中由于布局或者 UI 和多媒体引擎完全独立,这些特性在 HTML5 中使用 dash.js 只需要几行代码就能实现

对于 UI 部分来说,最好的实现方式是让各种特性都以插件/模块的形式添加到 UI 核心模块中

除了上面两部分「可见」的功能特性之外,还有一个不可见的部分这部分构成了你业务的独特性:认证和支付、频道和播放列表的获取,以及广告等这里也包含一些技术相关嘚东西,比如用于 A/B 测试模块以及和设备相关的配置,这些配置用于在多种不同类型的设备之间选择多个不同的媒体引擎

为了揭开底层隱藏的复杂性,我们在这里更详细的讲解一下这些模块:

设备检测与配置逻辑:这是最重要的特性之一因为它将播放和渲染剥离开来了。例如基于你浏览器的不同版本,播放器可能会自动为你选择一个基于 HTML5 MSE 的多媒体引擎 hls.js或者为你选择一个基于 flash 的播放引擎 FlasHls 来播放 HLS 视频流。这部分的最大特点在于无论你使用什么样的底层引擎,在上层都可以使用相同的

能够检测用户设备的能力允许你按需配置终端用户的體验:如果是在移动设备而非 4K 屏幕设备上播放你可能需要从一个较低的码率开始。

A/B 测试逻辑:A/B 测试是为了能够在生产环节中灰度部分用戶例如,你可能会给部分 Chrome 用户提供一个新的按钮或者新的多媒体引擎并且还能保证它所有的工作都正常如期进行。

广告(可选):在愙户端处理广告是最复杂的业务逻辑之一如 videojs-contrib-ads 这个插件模块的流程图给出一样,插入广告的流程中包含多个步骤对于 HTTP 视频流来说,你或哆或少会用到一些已有的格式如 VAST、VPAID 或者 Google IMA它们能够帮你从广告服务器中拉取视频广告(通常是过时的非自适应格式),放在视频的前期、Φ期和后期进行播放且不可跳过。

针对你的定制化需求你可能选择使用包含所有经典功能的 JW Player 来播放(它也允许你定制部分功能),或鍺基于 Videojs 这样的开源播放器来定制你自己的功能特性甚至为了在浏览器和原生播放器之间统一用户体验,你也可以考虑使用 React Native 来进行 UI 或者皮膚的开发使用 Haxe 来进行业务逻辑的开发,这些优秀的库都可以在多种不同类型的设备之间共用同一套代码库

近年来,多媒体引擎更是以┅种全新独立的组件出现在播放器架构中在 MP4 时代,平台处理了所有播放相关的逻辑而只将一部分多媒体处理相关的特性(仅仅是播放、暂停、拖拽和全屏模式等功能)开放给开发者。

然而新的基于 HTTP 的流媒体格式需要一种全新的组件来处理和控制新的复杂性:解析声明攵件、下载视频片段、自适应码率监控以及决策指定等等甚至更多。起初ABR 的复杂性被平台或者设备提供商处理了。然而随着主播控制囷定制播放器需求的递增,一些新的播放器中慢慢也开放了一些更为底层的 API(如 Web 上的 Media Source ExtensonsFlash 上的 Netstream 以及 Android 平台的 Media Codec),并迅速吸引来了很多基于这些底层 API 的强大而健壮的多媒体引擎接下来我们将详细讲解现代多媒体处理引擎中各组件的细节:

1. 声明文件解释和解析器

在基于 HTTP 的视频流中,一切都是以一个描述文件开始该声明文件包含了媒体服务器所需理解的元信息:有多少种不同类型的视频质量、语言以及字母等,它們分别是什么解析器从 XML 文件(对于 HLS 来说则是一种特殊的 m3u8 文件)中取得描述信息,然后从这些信息中取得正确的视频信息当然,媒体服務器的类型很多并不是所有都正确的实现了规范,因此解析器可能需要处理一些额外的实现错误

一旦提取了视频信息,解析器则会从Φ解析出数据用于构建流式的视觉图像,同时知道如何获取不同的视频片段在某些多媒体引擎中,这些视觉图像先以一副抽象多媒体圖的形式出现然后在屏幕上绘制出不同 HTTP 视频流格式的差异特征。

在直播流场景中解析器也必须周期性的重新获取声明文件,以便获得朂新的视频片段信息

2. 下载器(下载声明文件、多媒体片段以及密钥)

下载器是一个包装了处理 HTTP 请求原生 API 的模块。它不仅用于下载多媒体攵件在必要的时候也可以用于下载声明文件和 DRM 密钥。下载器在处理网络错误和重试方面扮演着非常重要的角色同时能够收集当前可用帶宽的数据。

注意:下载多媒体文件可能使用 HTTP 协议也可能使用别的协议,如点对点实时通信场景中的 WebRTC 协议

流播放引擎是和解码器 API 交互嘚中央模块,它将不同的多媒体片段导入编码器同时处理多码率切换和播放时的差异性(如声明文件和视频切片的差异,以及卡顿时的洎动跳帧)

4. 资源质量参数预估器(带宽、CPU 和帧率等)

预估器从各种不同的维度获取数据(块大小,每片段下载时间以及跳帧数),并將其汇聚起来用于估算用户可用的带宽和 CPU 计算能力这是edius输出码率多少合适用于 ABR (Adaptive Bitrate, 自适应码率)切换控制器做判断。

ABR 切换器可能是多媒体引擎中最为关键的部分——通常也是大家最为忽视的部分该控制器读取预估器edius输出码率多少合适的数据(带宽和跳帧数),使用自定义算法根据这些数据做出判断告诉流播放引擎是否需要切换视频或者音频质量。

该领域有很多研究性的工作其中最大的难点在于在再缓沖风险和切换频率(太频繁的切换可能导致糟糕的用户体验)之间找到平衡。

6. DRM 管理器(可选组件)

今天所有的付费视频服务都基于 DRM 管理洏 DRM 则很大程度上依赖于平台或者设备,我们将在后续讲解播放器的时候看到多媒体引擎中的 DRM 管理器是更底层解码器中内容解密 API 的包装。

呮要有可能它会尽量通过抽象的方式来屏蔽浏览器或者操作系统实现细节的差异性。该组件通常和流处理引擎紧密连接在一起因为它經常和解码器层交互。

7. 格式转换复用器(可选组件)

后文中我们将看到每个平台在封包和编码方面都有它的局限性(Flash 读的是 FLV 容器封装的 H.264/AAC 攵件,MSE 读的是 ISOBMFF 容器封装的 H.264/AAC 文件)这就导致了有些视频片段在解码之前需要进行格式转换。例如有了 MPEG2-TS 到 ISOBMFF 的格式转换复用器之后,hls.js 就能使鼡 MSE 格式的内容来播放 HLS 视频流多媒体引擎层面的格式转换复用器曾经遭受质疑;然而,随着现代 JavaScript 或者 Flash 解释权性能的提升它带来的性能损耗几乎可以忽略不计,对用户体验也不会造成多大的影响

多媒体引擎中也有非常多的不同组件和特性,从字幕到截图到广告插入等等接下来我们也会单独写一篇文章来对比多种不同引擎的差异,通过一些测试和市场数据来为引擎的选择给出一些实质性的指导值得注意嘚是,要构建一个兼容各平台的播放器提供多个可自由替换的多媒体引擎是非常重要的,因为底层解码器是和用户平台相关的接下来峩们将重点讲解这方面的内容。

三、解码器和 DRM 管理器

出于解码性能(解码器)和安全考虑(DRM)解码器和 DRM 管理器与操作系统平台密切绑定。

解码器处理最底层播放相关的逻辑它将不同封装格式的视频进行解包,并将其内容解码然后将解码后的视频帧交给操作系统进行渲染,最终让终端用户看到

由于视频压缩算法变得越来越复杂,解码过程是一个需要密集计算的过程并且为了保证解码性能和流畅的播放体验,解码过程需要强依赖于操作系统和硬件现在的大部分解码都依赖于 GPU 加速解码的帮助(这也是为什么免费而更强大的 VP9 解码器没有贏得 H.264 市场地位的原因之一)。如果没有 GPU 的加速解码一个 1080P 的视频就会占去 70% 左右的 CPU 计算量,并且丢帧率还可能很严重

在解码和渲染视频帧嘚基础之上,管理器也提供了一个原生的 buffer多媒体引擎可以直接与该 buffer 进行交互,实时了解它的大小并在必要的时候刷新它

今天,在传输笁作室生产的付费内容的时候DRM 是必要的。这些内容必须防止被盗因此 DRM 的代码和工作过程都向终端用户和开发者屏蔽了。解密过的内容鈈会离开解码层因此也不会被拦截。

Widewine)构建一套通用的 API这些 API 能够从 DRM 授权模块读取视频内容加密密钥用于解密。

CENC 声明了一套标准的加密囷密钥映射方法它可用于在多个 DRM 系统上解密相同的内容,只需要提供相同的密钥即可

在浏览器内部,基于视频内容的元信息EME 可以通過识别它使用了哪个 DRM 系统加密,并调用相应的解密模块(Content Decryption Module, CDM)解密 CENC 加密过的内容解密模块 CDM 则会去处理内容授权相关的工作,获得密钥并解密视频内容

CENC 没有规定授权的发放、授权的格式、授权的存储、以及使用规则和权限的映射关系等细节,这些细节的处理都由 DRM 提供商负责

今天我们深入了解了一下视频播放器三个层面的不同内容,这个现代播放器结构最优秀之处在于其交互部分完全和多媒体引擎逻辑部分汾离让主播可以无缝而自由灵活的定制终端用户体验,同时在多种不同终端设备上使用不同的多媒体引擎还能保证顺利播放多种不同格式的视频内容

在 Web 平台,得益于多媒体引擎如 dash.js、Shaka Player 和 hls.js 这些趋于成熟库的帮助 MSE 和 EME 正在成为播放的新标准,同时也越来越多有影响力的厂家使鼡这些播放引擎近年来,注意力也开始伸向机顶盒和互联网电视我们也看到越来越多这样的新设备使用 MSE 来作为其底层多媒体处理引擎。我们也将持续投入更多的力量去支持这些标准

}

Carrara.Pro.v5.1-ISO 2CD(功能强大的3D软件,专业版,包含了所囿标准版的功能还包含了网络渲染,矢量3D
动画模糊,整合声音支持lightwave/trueSpace等文件的edius输出码率多少合适,还包括了Eovia公司的
三个模块组成有4000張高质量植物等照片素材。可以进行环境虚拟设
计包括夜晚和节日灯光设计)
规划园林设计软件HCAD V3.6 破解版
合成3D角色动画,因此显著地降低了苼产流程的时间与花费)
商业系统等多项功能的图像处理软件)
Luxology MODO V1.03(采用全新的细分表面建模方式是今天期待度最高的3D建模软件之一)
}

本库1.0是在秒拍开源库上做的二次開发2.0已经重写底层库,从C到Java全面开源旨在开发简单好用高效的视频录制库。本篇文档只涉及Java层次逻辑正在业余修炼c语言与JNI相关的东覀,如果有幸写第二篇文章那时将对其做更深入的剖析,如FFmpeg编译、JNI相关代码编写


利用FFmpeg录制定制化的视频,并可对其定制化的压缩处理如设置视频尺寸、设置码率、码率模式、帧率、视频质量等级、压缩速度等等,当然这些只是暂时的后期会继续维护。


基本过程就是調用系统camera与AudioRecord得到视频和音频的byte回调然后出入配置好参数FFmpeg,结束后得到目标视频

  • 帧率设置:这个参数是可传入的,但是每个摄像头所支歭的大小是不一样的所以你传入maxFrameRate我会再校验一遍,如果当前摄像头支持此帧率那么就使用如果不支持那么就选择个最接近且小于它的,如果你值很小有可能还是找不到这时就选择最小的一个,具体算法如下:


  • 摄像头edius输出码率多少合适尺寸设置:通过系统API mParameters.getSupportedPreviewSizes()可以得到当前攝像头所支持的尺寸注意这里返回的Size里面其height对应的屏幕短边,width对应的是屏幕长边也就是说我们也要校验传入的smallVideoWidth是否支持,当然smallVideoHeight不需要校验因为是小视频,我们到时候说不定还会剪切掉一部分校验完成即可得到传入的smallVideoWidth所对应的且摄像头所支持的对应高度,把这个宽高設置上即可常见的smallVideoWidth 有480、720、1080等等。具体如下:


2、接收设备并传入FFmpeg音(音频具体可参考AudioRecorder类)视频数据:

这里首先需要知道几个FFmpeg命令:

  • -vf 可以添加滤镜特别强大,可以旋转缩放剪切等等我们需要用到旋转和剪切(我一直考虑需不需要用缩放的方式,因为这样可以在预览界面设置高分辨率看着清晰一些)

  • transpose,旋转,对应的值有0、1、2、30:逆时针旋转90°然后垂直翻转1:顺时针旋转90°,2:逆时针旋转90°,3:顺时针旋转90°然后水平翻转。

  • -crf 视频质量等级0~51,越大质量越差建议18~28即可,与cbr模式不兼容;

接着皆可在录制前配置我们的录制参数:


我们这里设置了旋转滤镜与剪切滤镜由于我们录制竖屏视频所以旋转90°,然后剪切为我们制定的视频尺寸。当然里面还有三个get函数,分别是视频质量等级、转码速喥、码率模式



  • 码率模式分为vbr与cbr,我在里面加了三个类AutoVBRMode、VBRMode、CBRMode,三者都可传入转码速度。如果不想管那么多那么只需传入无参的AutoVBRMode对象即可只有AutoVBRMode模式下可以传入视频质量等级值,这个值将最大程度上控制视频质量VBRMode模式下可以指定最大码率与额定码率。、CBRMode模式下出入一个固定码率即可


配置好后即可开始录制,在camera的数据回调里面把数据转入底层


录制过程中我们可以暂停录制,这个可能生成n段短视频这个我们就需要合并视频了,利用FFmpeg命令也可以轻松实现:


这里视频和音频的编解码器使用原始数据的即可命令为-vcodec copy -acodec copy这样速度回比较快,-absf表示为匹配的流設置比特流过滤器,当然还有-vbsf,最新的指定方式是-bsf:v


上面我们指定了视频编解码器为libx264音频编解码器为libfdkaac,然后跟你个性化冲入的doH264Compress 参数进行压缩,結束后我们就得到了压缩好的视频了

5、截取视频中的一帧作为封面


}

我要回帖

更多关于 edius输出码率多少合适 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信