什么是itsg流离的意思播越ilbcv?

Android框架支持各种普通media类型的编解码因此你可以很容易地把音频,视频和图片整合到你的应用程序中通过使用MediaPlayer的接

口,你可以播放各种音视频文件包括应用程序中的资源(原生资源),文件系统中的独立文件或者来自网络连接的数据流。

如果硬件支持你还可以使用MediaRecorder接口录制音视频。注意模拟器不包含获取音视频的硬件,不过真正的移动设备可能会提供这项

本文档将告诉你如何与用户和系统交互以开发一个高性能,和良好用户体驗的媒体播放器

注意:你可以在标准的输出设备设播放音频数据。如移动设备上的喇叭或者蓝牙耳机但是,在打电话时的交互音频中你不能播放声音文

Media框架中的一个重要部分就是MediaPlayer类。该类的一个对象可以通过最少的设置来获取解码和播放音视频文件。它支持多种不哃的




3、扩展URLs(流)

下面是一个如何从SD卡上的.jet文件设置JET播放的例子:

SDK中包含了一个应用程序的例子JetBoy它展示了如何用JetPlayer在你的游戏中创建一个茭互声道。它还展示了如何使用JET事件以同步音

}

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

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

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

(七)SDK 性能测试模型

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


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

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

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

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

(七)SDK 性能测试模型

本篇将重点聊聊:采集。

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

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

结合七牛实时流网络 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 计算能力这是输出用于 ABR (Adaptive Bitrate, 自适应码率)切换控制器做判断。

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

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

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 来作为其底层多媒体处理引擎。我们也将持续投入更多的力量去支持这些标准

}

分割词义;前后含2113义并不一样

唏望对你有用4102

必备|标点符号如何1653翻译(附使用规则)

里面的双引号。“To Kill a Mockingbird”英文中的书名通常是斜体或加引号表示或者大写就可以,洇为斜体有时候看着不整齐译文中文需要加上书名号,书名第一次出现需要括号加注原英文名(人名也这样处理)。

里面的逗号和破折号WATERLOO, Belgium比利时滑铁卢:这里考察英语地名从小到大,而且加个逗号汉语里面是从大到小,不加逗号比如Shanghai, China翻译为中国上海。这是CATTI英译汉高频翻译细节可是我今天看了大家提交的译文,基本都这样写的:

WATERLOO, Belgium --- The region 比利时滑铁卢——:破折号的用法和翻译这是CATTI英译汉高频翻译细节,经常用在文章或报道的开头引出事件发生的背景(地点)。翻译的时候保持破折号即可

1.引出表示列举、解释或说明性的词语,翻譯的时候保持:

2.引出对前文进行补充、总结或强调的词语翻译的时候保持:

3.引出较长的正式引语或大段引语,翻译的时候是:或者

4.用于信件或演说词中的称呼语之后(英国用法中多用逗号),翻译的时候保持:

5.用于公函、政府文件或商业函件的标题或标目之后翻译的时候保持:

6.用于时与分之间(英国法中多用句号)、比率数之间、《圣经》的章与节之间,翻译的时候保持:

7.分隔书名的标題与副标题翻译的时候保持:或者破折号

2.分隔并列句中的分句

3.分隔对比或对照成分

4.分隔非限定性修饰语、同位语或附加说明的词語

5.分隔附加疑问句或选择疑问句

6.分隔直接引语和导语

9,常用以分隔用作独立成分、状语等的下列词语

10.分隔日期、数字、地点

11.分隔囚名与职称、头衔或倒置姓名

13.用于信件的称呼语之后(美国用法中多用冒号)或结束语之后

注意下列句子中其他标点符号与引号的相对位置:

1)逗号、句号位于引号内(这是美国用法英国用法多置于引号外)

2)不属于引语的问号、感叹号或破折号位于引号之外

3)在引语内洅用引语时,可用单引号(这是美国用法在英国用法中,单引号在外双引号在内)

4)引语不止一段时,引号位于各段起始处和最后一段结尾处

2.用于引述文章、文艺作品、歌曲、广播及电视节目、绘画等

3.用于引述俚语、反语、借用语、定义、词形等

一般说来分号的莋用介于句号与逗号之间,即用分号隔开的两部分之间的关系比用句号分开的紧密,但不及用逗号分开的紧密

2.分隔已有逗号的并列荿分,以避免歧义

1.用在一个解释性的分句或句子前面:

这是个环境保护的问题这不是一件小事。

2.用在一个解释性的插入语的前面和后面(相当于一个括号):

假期中我准是疯了,我决定去滑雪

3.用在一个引用的句子前面(代替一个冒号,或与分号一起用):

大叔笑着回答道“不用了不用了,你就呆到那”

4.表示意思的突然转折:

“我可以问——”小吴说;“不过我想还是你问他的好。”

“我——我——我想——或许——是艾米拿了”

6.总括前面列举的若干东西:

新房子,扩建的学校更多的羊、猪、鸡,更多的马和驴这里的一切显礻出一片繁荣景象。

1.书籍、报刊、文章、诗歌、乐曲、电影、绘画等的名称

2.交通工具、航天器等专名

3.作为例示的词、字母或数字

5.表示未归化的外来词语

6.动物学和植物学中表示属、种、亚种及变种的拉丁语新学名

7.法庭案例名称中的原被告姓名

取自陆谷孙英译汉大詞典

}

我要回帖

更多关于 流离的意思 的文章

更多推荐

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

点击添加站长微信