stream - MPEG-TS 基础

标签 stream mpeg transport

我读了一些关于 mpeg 传输流的教程,但有两个基本问题我不明白: 1. mpeg-ts muxer接收来自音频和视频的pes数据包,并输出mpeg-ts数据包。它是如何进行混合的?每当来自任何程序的数据包等待其输入时,复用器都会醒来并处理将 pes 切片为 mpeg-ts 吗? 2. 用户是否可以选择 mpeg-ts muxer 输出的比特率?编码速率与mpeg-ts速率之间有什么关系?

非常感谢,

最佳答案

MPEG2-TS 复用是一种复杂的艺术形式。建议阅读:MPEG2-TS 规范、SPTS/MPTS、VBR 与 CBR、假设引用解码器和缓冲区(EB、MB、TB)、抖动和漂移。

对您的问题的一个非常简短的回答可以总结如下: 对于每个编码器,在线的另一端有一个解码器,它想要在每个帧间隔显示视频帧(或音频帧)。该帧需要在其呈现时间之前被解码。如果该帧使用其他帧作为引用,则在呈现之前也需要对它们进行解码。 当多路复用时,数据必须在呈现之前有足够的时间到达。要在时间 n 呈现的视频帧必须在时间 n - x 时在解码器处可用,其中 x 是取决于解码器的缓冲速率的时间度量(参见 MB、TB、EB)。如果TS码率太低,就会出现“下溢”,视频无法按时进入解码器。如果 TS 比特率太大,就会发生“溢出”,缓冲区必须丢弃数据包,这也会产生视觉伪影。

关于stream - MPEG-TS 基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196554/

相关文章:

php - Socket和Transport有什么区别,如果有的话

networking - TCP吞吐量

c++ - 为什么流运算符在 C++ 中返回引用?

c - 如何刷新 i/o 流?我正在使用 scanf(),fflush(stdin) 不起作用

iphone - 如何从 iPhone SDK 中的视频中提取屏幕截图?

android - 从 Android 上的相机录制视频到 mp4

ffmpeg - CLI 从 quicktime 或 mpeg 文件中提取日期/时间戳(时间戳)

spring - Elasticsearch TransportClient NetworkPlugin NoClassDefFoundError

flutter - 如何在 flutter 中返回用户流

php - 通过 PHP 从 Internet 流式传输文件很慢