最后更新:2022-06-19 22:58:53 手机定位技术交流文章
如今,移动现场广播技术所面临的挑战远比传统的设备或计算机现场广播更加困难,其完整的处理过程包括,但不限于: 录音视频采集 、 美容/滤波/特殊效果处理 、 编码 、 包装 、 推力 、 转码 、 分发 、 解码/渲染/播放等.
移动端实时录音视频流的常见问题包括:
如何在不稳定的网络环境中稳定锚杆流?
如何让偏远地区的观众观看高清晰度的现场直播?
如何聪明地突然切换活卡线?
如何准确测量现场广播质量指标,并及时调整?
移动设备上的不同芯片平台如何编码和渲染高性能视频?
如何处理像美一样的滤波器的特殊效果?
如何实现播放秒开?
如何确保现场直播继续顺利播放?本分享将揭示移动端实时视频视频的核心技术神秘的面纱。
首先我们需要理解一个基本的概念:视频。从感性的角度来看,视频是一个非常有趣的视频,可以是电影,可以是短片,它是一个连贯的视觉效果,显示丰富的图像和音频。但从理性的角度来看,视频是一种有结构的数据,用工程的语言解释,我们可以将视频分析成以下结构:

内容元素:
图片 ( 图片 )
音频 ( 音频 )
元数据
编码格式:
Video : H.264,H.265, …
Audio : AAC, HE-AAC, …
容器:MP4,MOV,FLV,RM,RMVB,AVI,..
任何视频文件, 从结构上讲, 包括以下:
它由图像和音频的最基本内容构成;
图像以视频编码的压缩格式(通常为H.264);
音频被处理在音频编码压缩格式(例如AAC);
注意相应的元数据(Metadata)。
最后,封装了一个容器包(例如MP4),并创建一个完整的视频文件。
如果觉得难以理解,想象一个番茄酱的瓶子.最远的瓶子比这个容器更好.瓶子上所指定的信息,如原材料和工厂的位置,比元数据更好。当盖子打开时,番茄酱本身比压缩和加工的编码内容更好,将番茄和调味料转化为番茄酱的过程就像编码一样.番茄和调味料比原内容更好.
简言之,理性认知视频的结构帮助我们理解视频广播。 如果视频是“结构化数据”,那么视频广播无疑是传输这种“结构化数据”(视频)的实时方式。
因此一个明显的问题是:你如何在实时传输这些“结构化数据”(视频)?
这里有一个悖论:在一个容器里包装的视频,它必须是一个不可改变的视频文件,可变的视频文件已经是一个产品.根据“相对论”,这种生产结果显然是不可能在实时准确的,它是时间和空间的记忆。
因此,视频广播必须是一个“侧生产、侧传输、侧消费”的过程,这意味着我们需要更仔细地研究从原始内容元素(图像和音频)到最终产品(视频文件)之前视频的中间过程(编码)。
让我们深入了解视频编码压缩技术.
为方便视频内容的存储和传输,通常需要减少视频内容的音量,也就是说,您需要压缩原始内容元素(图像和音频),压缩算法也被称为编码格式。例如,视频中的原始图像数据将使用H.264编码格式压缩,音频采样数据采用AAC编码格式压缩.
视频内容经过编码和压缩后,它确实对于存储和传输有用;然而,在查看播放时,也需要解码过程。因此,在编码和解码之间,显然,需要就一个编码器和解码器都能理解的公约达成协议。在视频图像编码和解码方面,这个惯例很简单: 编码器编码多个图像,并生成一个GOP ( 图片组 ) 段.解码器读出GOP的一个部分去解码,然后读出屏幕来渲染显示。

GOP(Group of Pictures)是一系列连续图像,由一个I帧和几个B/P帧组成,是视频图像编码器和解码器存储的基本单元。

I框架是一个内部编码框架(也称为关键框架),P框架是一个前瞻预测框架(一个前瞻参考框架),而B框架是一个双边的内部插值框架(一个双边的参考框架)。
没有I帧,P帧和B帧不能解码。

小结一下,一部影片,图像部分数据是GOP的集合,而单个GOP是I/P/B帧图像的集合。在这样的几何关系中,视频比对象更好。GOP比分子更好。I/P/B帧的图像比原子图像更好。想象一下,如果我们运输一个物体,转化为原子的单一转移,以光速传播最小的粒子,用人类生物学的眼睛来观察,那会是什么经历?

免费分享,私人邮件按钮1,信息包括 「Andoird Audio Video Development Manual + Audio Video Learning Video + Learning Document Package + Big Factory Interview Questions + 2022 Latest Learning Roadmap」等。
视频广播是一种基于光速的时间序列传输视频内容的最小粒子(I/P/B帧,..)的技术。
简而言之,现场是拍摄数据的每个帧 ( 视频 / 音频 / 数据帧 ),输入时间标记后执行流程转移的过程.发送端源源连续采集音频视频数据,通过编码 、 包装 、 推销,然后通过继电器分发网络进行传播,播放端源不断下载数据并按时间顺序解码播放。这就是“侧生产、侧传送和侧消费”的现场直播过程的实现。
了解上述视频和现场直播的两个基本概念后,我们可以对现场直播的业务逻辑进行分析。
以下为简化的多播业务模式和不同层之间的协议:

这些 协定 之间 的 不同 情况 如下 :


这些是现场技术的基本概念,下面我们学习更多关于影响人们视觉体验的现场表现指标。
livestreaming的第一个性能指标是延迟,即从源到目的地发送数据所需的时间。

根据爱因斯坦的狭隘相对论,光速是所有能量、物质和信息运动所达到的最高速度,这一结论限制了传播速度,因此,即使我们用肉眼感知的实时也是某种延迟。

因为RTMP/HLS是一个基于TCP的应用程序层协议,TCP接力三次,波浪四次,每次慢启动过程往前回后,它增加了重新启动时间(RTT),这增加了延迟。

其次,根据TCP数据包重传输特性,网络震荡可能导致数据包重传输和间接导致延迟。

一个完整的现场直播过程,包括但不限于:获取、处理、编码、包装、推送、传输、编码、分发、拖拉、解码和播放。
第二个现场表现指数卡,是指在视频播放过程中出现帧滞后,使人们清楚地感受到“卡片”。
卡顿的原因是推力端的数据中断、公共网络交通拥挤或网络振动异常以及终端设备的过度编码性能。
第三个性能指标是第一个屏幕使用时间,第一次点击播放后,裸眼看到屏幕等待的时间.技术上指的是玩家在解码显示屏幕的第一帧渲染时所花费的时间。通常是说“休息几秒,”指点击播放后,你可以在一秒钟内看到播放屏幕。首屏打开越快,说明用户体验越好。
例如,上述三个性能指标对用户体验具有低延迟、高清晰度流量和非常快的秒数,这些三个性能指标的理解对于优化移动现场应用的用户体验至关重要。
因此,在移动现场直播场景下的常见漏洞是什么?基于实践中总结的经验,移动现场直播平台的漏洞主要可以归纳为两个方面:设备差异和网络环境在这些场景下所带来的技术测试。

在iOS平台上,硬式和软式,几乎没有编码差异,这是由于苹果公司解散的芯片平台的差异。
然而,在Android平台上,Android Framework SDK提供的MediaCodec编码器,在不同的芯片平台上,差异表现很大,不同的制造商使用不同的芯片,不同芯片平台的Android MediaCodec性能略有不同,实现全平台兼容的成本通常很低。
另一个是Android MediaCodec硬编码的水平H.264编码图像质量参数是固定的基线,因此,绘画的质量通常也是一般性的。因此,在Android平台上,推荐是用软编,好处是画质可调控,兼容性也更好。

例如,摄像机采集输出可能是一个图片,图片的体积并不小,如果收购的频率很高,编码的帧率很高,每个图片都编码了,然后编码器可能再次过载.这个时候,可以考虑在编码前,没有影响图像质量(我们先讨论了帧速率的微量意义),进行选择性丢帧,这降低了编码链路的电耗。

移动网络下,通常很容易遇到网络不稳定,连接被重置,断线重连,一方面频繁重连,建立连接需要开销。另一方面,特别是当 GPRS/2G/3G/4G交换发生时,带宽可能出现瓶颈。当带宽不够,高帧速率/高编码内容难以发送,此时需要支持变量编码率。
也就是说,在驱动器端上,可以检测网络状态和简单的测量速度,动态改变编码率,确保驱动器在网络切换时流畅。
第二,编码、包装和推力这个逻辑部分也可以微调,以尝试选择性丢失帧,例如优先丢失视频参考帧(不丢失I帧和音频帧),从而减少传输的数据内容,但同时实现一个目标,不会影响图像质量和版本的流。
实时是媒体流,而APP的交互是API消息流。这两个状态不能混淆,特别是实时流的状态不能根据APP的交互来确定。

这些是移动现场的常见陷阱和避险措施。
也许你已经注意到,一些市场上的手机有非常快的开放速度的LiveApps。 还有一些手机的LiveApp,点击再生等几秒才能播放。
大多数玩家在完成GOP后不能解码播放,基于FFmpeg端口的播放器甚至需要等待音频与时间标记同步(如果现场流中没有音频,则仅一个视频就等于等待一个音频超时播放屏幕)。“第二开”可以从多种角度来考虑。
最佳化措施一:重写播放器逻辑让播放器在获得第一个键帧时显示
如果Live服务器支持GOP缓存,这意味着玩家可以在连接到服务器后立即获取数据,从而减少在区域和操作员之间重新传输的时间。
GOP体现了关键帧的周期,这是两个关键帧之间的距离,框架组中的最大帧数。假设视频的帧速率为24fps(即每秒24帧),关键帧周期为2s,GOP是48个图像。一般而言,每秒的视频至少需要一个关键帧。
增加关键帧数可以提高图像质量(GOP通常是 FPS的倍数),但同时增加了带宽和网络负载.这意味着,客户端播放器下载GOP,毕竟,GOP有一定数量的数据量,如果播放端网络坏,可能无法在几秒内快速下载GOP,进而影响观感体验。
如果玩家的行为逻辑无法在第一帧的第二个打开时改变,现场服务器也可以做一些技巧,例如从缓存的GOP到缓存的双键帧(减少图像的数量),这可以大大降低玩家所装载的GOP内容量来传输。
优化措施2:应用程序操作逻辑优化
例如,提前进行 DNS 分析(节省数十毫秒),并预先准备速度选择线(选择最佳线)。经过这种预处理后,在点击播放按钮时,它将大大提高下载性能。一方面,它可以优化传输水平的性能;另一方面,它可以优化客户反馈行为的商业逻辑.两者都能有效互补,作为第二开的优化空间。
在手机直播场景下,这就是一个刚需。没有手机现场应用的美容功能,主播基本不爱用。可以在采集画面后,在数据发送到编码器之前,将数据源重新指向滤波处理程序,一旦原始数据经过滤波器处理,然后把它送回编码器进行编码.
除了可以优化体验的移动端口之外,现场流媒体服务端口架构也能够减少延迟。 例如,接收器会积极推送GOP到边缘节点,边缘节点会缓存GOP,并且播放端口可以快速加载,减少后备源延迟。

其次,它可以更接近处理和分配的终端。

第二个开放的解决方案是第一个在现场上载的播放体验,如何确保屏幕和声音在连续广播期间流畅?因为,毕竟,现场广播不是像HTTP那样一次性请求,并且在索克级保持了长期的连接,直到宣布结束为止。
我们已经讨论过卡顿的定义,即屏幕在播放时被固定,并触发人的视觉感官。 不考虑终端设备的性能上的差异,我们将研究网络传输水平的原因,并探讨如何确保连续的现场非卡丁。
例如,播放端暂时切断,但很快恢复,在这种情况下,如果播放端不处理错误,很难避免黑屏或重载播放。
为了容忍这种网络错误,并实现最终用户不敏感性,客户端玩家可以考虑为FIFO(Advanced Pre-Exit)建立缓冲队列,解码器从播放缓冲队列中读取数据,缓存队列不断从现场服务器源下载数据.通常,缓冲队列的容量是按时间(例如3s)统一的,当播放端网络不可靠时,客户端缓存可以作为“网络不敏感”的过渡。
显然,如果广播服务器边缘节点失败,而客户端的播放器仍处于长期连接中,而客户端的缓冲空间不再使用,并且客户端的业务逻辑需要结合来进行调用,那么这只是一个“缓冲措施”。
重要的是将客户连接到服务端,可以做精准调度。在启动实时流转驱动器之前,例如,基于IP地理位置和运营商的准确时间安排,将线的最佳质量分配到边缘接口节点.在直播过程中,像帧速率反馈等质量数据可以实时监测,基于现场流的质量动态调整线.
1.一般来说,关键帧设置的频率是多少?是否有动态输入设置?这么做是很难的,因为第一屏幕的长度很长。徐利:关键帧间隔越长,GOP越长,理论上画面越高清。但是,当产生HLS活时,最小的切谷物也是GOP,所以针对交互直播,GOP设置通常不会太长。现场广播通常有两个关键帧间隔。例如,帧速率为24fps,两个关键帧之间的间隔是48fps,这个GOP是2s。
这个现场广播是用于互联网加速器的?有遇到什么坑没?徐利:这七只牛主要是现场广播的自立点,它还支持许多第三方CDN服务提供商的整合,多元化的线路组合为客户提供更好的质量服务.在与第三方CDN合作的过程中,遇到的问题以及更细微的交流与分享的其他机会。
3.RTMP流流:除了优化线,还有其他加速方法吗?徐利:物理上优化线,逻辑上优化战略,如选择性丢失帧,不影响编码图像质量,降低传输量。
4.OBS推力,音频/视觉信号不同步时,播放端的HLS有什么问题?怎么优化?徐利:这可能是收购的最后一个问题,如果获取端编码链接不能同步音像,您可以在接收服务器上同步声音绘制时间邮票,这样是全局的校对。如果播放结束时出现解码性能问题,所以你需要调整播放逻辑,例如,在确保声像时间印制的强一致性的前提下,选择性丢一部帧。
5.PPT的前页中的一个概念似乎是错误的,I 帧不是关键帧,IDR 帧才是。IDR帧是I帧,但I框架不一定是IDR框架。只有IDR帧被重新启用。徐利:中国人把I帧译成关键帧,但是,自从IDR框架被提到以来,可以展开说明一下。所有IDR帧都是I帧,但并非所有I帧都是IDR帧,IDR帧是I帧的子集。I帧严格定义为帧内编码的帧,因为它是一个全帧压缩编码帧,I帧通常用来表示“关键帧”。IDR是一个基于I框架的扩展。带了控制逻辑,IDR图像都是我帧图像,当解码器解码到IDR图像时,立即清除参考帧队列,输出或丢弃所有解码数据.重新查找参数集,开始一个新的序列。所以如果前面的序列犯了重大错误,这就是你重新同步的机会。IDR图像之后的图像永远不会用IDR图像之前的图像的数据解码。
6. 是否研究了 nginx rtmp 模块,为什么没有用,对它有什么评价? 徐立:有调研过,nginx_rtmp_module是一个单进程的多个线程,Non-go 这个轻量级线程/协调器以语法的自然语义方式编译流操作。nginx最初的代码量更大(约160,00行),但与生活业务相关的功能并不多。主要通过写 nginx.conf来安排租户,通常单租户可以,但商业的可扩展性并不十分灵活,可满足基本需求,不满足高级功能。
你使用开放源代码吗?你为x264编码吗?你开发自己的现场服务器吗,还是开放源代码? 徐利:现场服务器是为外出开发的,移动端代码优先的硬代码,软代码为x264
8. 你能告诉我,当用 OBS 推到 nginx_rtmp_module 时,视频是否被压缩或是否需要根据 OBS 重新开发? 徐利: OBS 已经压缩了所有代码,不需要再开发。
9. 如果 想 将 广告 ts 文件 シームレス 地 插入 到 HLS 流 中, 请 问 以下 问题 : ts 部分 的 分辨率 必然 与 前 一 个 视频 流 相同 吗?
可能有分歧。在这种情况下,这两个视频完全独立,可以没有任何关系,只要插入终止标签,玩家在识别这个标记后,可以通过替换解码器参数进行无缝的游戏,屏幕将顺利开关.2、不需要递增。举个例子,视频A是现场直播的,在五点时,打到五点,插入一个视频 B,你需要先插入“终止”字符,再插入 B,当B完成播放时,然后插入一个中断,再插入 A,此时,A的分数可以从前一个增加,也可以根据时间长度B插入在中间,一般来说,当你进行现场广播和时间转移时,分数会不断增加。现场讲话计数B的长度。
本文由 在线网速测试 整理编辑,转载请注明出处。