在ts流中,MPEG2编码中,音视频包是交错出现的。
分析其pts可以发现,在同等交错位附近,音频的pts要比视频的靠前得多。
比如一段实际码流数据如下:
--------------------------
valid video packet count1
video packet 视频包1:
packet.pts -9223372036854775808
packet.dts 3529565163
packet.duration 3600
packet.size 37460
packet.pos -1
--------------------------
valid video packet count1
audio stream packet: 音频包1:
packet.pts 3529553320
packet.dts 3529553320
packet.duration 2160
packet.size 384
packet.pos -1
--------------------------
valid video packet count2
video packet: 视频包2:
packet.pts 3529568763
packet.dts 3529568763
packet.duration 3600
packet.size 18508
packet.pos -1
--------------------------
valid video packet count2
audio stream packet 音频包2:
packet.pts 3529555480
packet.dts 3529555480
packet.duration 2160
packet.size 384
packet.pos -1
--------------------------
valid video packet count3
video packet 视频包3
packet.pts 3529572363
packet.dts 3529572363
packet.duration 3600
packet.size 17960
packet.pos -1
--------------------------
valid video packet count3
audio stream packet 音频包3
packet.pts 3529557640
packet.dts 3529557640
packet.duration 2160
packet.size 384
packet.pos -1
--------------------------
valid video packet count3
audio stream packet 音频包4
packet.pts 3529559800
packet.dts 3529559800
packet.duration 2160
packet.size 384
packet.pos -1
--------------------------
valid video packet count4
video packet 视频包4
packet.pts -9223372036854775808
packet.dts 3529575963
packet.duration 3600
packet.size 39632
packet.pos -1
--------------------------
valid video packet count4
audio stream packet 音频包5
packet.pts 3529561960
packet.dts 3529561960
packet.duration 2160
packet.size 384
其实这样的理由是,在播放器实际播放过程中,音频是持续播放,以视频来同步音频。
这样的好处是,音频缓冲,而视频实时解码。音频占用存储量较小,而用视频来同步音频,如果解码速度实在跟不上,可以调帧。
人的肉眼对每秒比如25帧的视频跳帧是没有太大察觉度的,但如果音频出问题,很容易听出来,会影响到用户体验。
这就是为什么ts流中音频数据比视频数据优先传输的原因。
如果我们需要对音视频进行同步,关键就是找一个绝对的基准点。而之后所有的音视频数据都可以根据帧率、码率算出来偏移量。如何寻找这个绝对基准点呢?
比如从我要找到某个视频帧对应的确切PCM,可以在音频包上向前寻找附近pts与视频包较为吻合的两个音频包。
然后由于PCM和音频包大小都是固定的,就可以计算出具体的偏移量了。(根据前后pts及视频帧pts计算偏移)
这样,我从ts流任意一个地方开始播放,可能刚开始的视频帧是没有声音的。(因为刚开始的音频包对应的是之后的视频帧)
那在播放过程中,如何指定从确切的某视频帧开始播放?(一般播放器可能不能精确定位到一帧,而是附近的I帧)。
我们只需要向前索引最近的I帧,然后从I帧解出来当前帧就可以了。为了加快速度,甚至可以刚开始建力帧数据的索引信息,用于迅速定位I帧。
分享到:
相关推荐
在数字视频传输和存储中,MPEG2 Transport Stream (TS) 是一种广泛使用的格式,它将音视频数据打包成固定长度的包,每个包由188个字节组成。TS流包含多种服务,如视频、音频和辅助数据,通过特定的PID标识不同的服务...
描述中提到的 "TsMuxer.dll" 是一个C/C++编写的TS流打包库,它允许开发者将H.264编码的视频流和音频流合并成符合MPEG2-TS规范的数据流。这个库通常用于构建流媒体服务器、视频转码工具或者嵌入式设备中的多媒体处理...
解析器会识别和提取TS包头中的同步字节,解析出PID(Packet Identifier),进而找到对应的服务如音频流或视频流。解析过程中,还需要处理错误检测和修复,确保数据的完整性。 FFmpeg是一个强大的开源库,包含了多种...
MPEG2的TS流找同步程序,连续找到5个188字节的同步包才认为同步上,否则未同步;
在多媒体领域,MPEG2TS(Transport Stream,传输流)和MPEG2PS(Program Stream,节目流)是两种常见的编码格式,它们主要用于存储和传输视频数据。MPEG2TS通常用于数字电视广播,而MPEG2PS则常用于DVD等存储介质。...
音视频同步是指在播放音视频文件时,音频和视频流保持同步的过程。为了实现音视频同步,FFmpeg提供了两个重要的参数:DTS(解码时间戳)和PTS(显示时间戳)。DTS告诉我们什么时候需要解码,而PTS告诉我们什么时候...
TS流的解析需要先找到PAT表,然后找到PMT表,最后找到音视频流。PAT表和PMT表需要定期插入TS流,以便解码器能够正确地解码TS流。 TS流是一种广泛应用于数字电视和流媒体领域的数据传输格式,它可以将TS流理解为一种...
本文将深入探讨如何使用FFmpeg库在Linux系统中实现音视频同步的代码实践。 音视频同步的核心在于确保音频和视频的数据流在播放时能够正确对齐,以避免出现声音提前或滞后于画面的现象。FFmpeg提供了丰富的API来帮助...
在IT领域,MPEG2-TS(Transport Stream)是一种广泛应用于数字电视、卫星广播和视频流媒体的容器格式。TS工具是专门用于分析和处理这种格式的文件的工具集,帮助我们理解、调试和优化MPEG2-TS流。下面我们将深入探讨...
要从MPEG2_TS流中提取视频序列流,首先需要识别出携带视频数据的包。这通常通过PID来实现,因为每个服务(频道)的视频和音频数据都有各自的PID。一旦找到视频数据的PID,就可以把相关的TS包汇集起来,去除包头,...
"FFMpeg对mpeg2ts流解码的流程分析" ...FFMpeg中mpeg2-ts流的解码流程是一个复杂的过程,需要了解mpeg2-ts流的格式和FFMpeg的解码机制。通过本文档的学习,读者可以快速掌握相关知识,并应用于实际项目中。
MPEG2TS流解析程序是针对传输流(Transport Stream,简称TS)文件进行处理的工具,主要用于解码和提取TS文件中的视频和音频数据。在数字电视广播、视频编码和网络传输等领域,TS流格式被广泛应用。这个程序是用C#...
PS格式更加紧凑,不包含TS流中的错误修复和流同步信息,但仍然能承载多路音视频数据,适合连续、无损地存储和播放。 描述中提到的“分析TS流中的PSI节目信息”,PSI(Program and System Information)是TS流中的...
TS包协议是数字电视系统和网络中不可或缺的一部分,它支持音视频编解码的同步和组合。 描述: 本文档提供了13818标准的TS协议, 用于分析TS流, 主要用于音视频流的编解码 国际标准13818-1,也称作ITU-T H.222.0,是...
在音视频解码过程中,mpeg2ts1394dec-0.3.1首先会解析PAT,获取到节目信息,然后通过PMT解析出具体节目的音视频流配置,包括编码格式(如H.262 for video, MPEG1/2 Audio等)、声道数、分辨率等关键参数。...
关于TS流的解析.pdf:此文件可能详细讲述了TS流的解析过程,包括如何从TS流中提取音视频数据,理解不同类型的包,以及如何处理时间码和PTS/DTS(节目时钟参考/解码时间戳)。 TS协议.pdf:这份文档可能涵盖TS协议的...
标题中的“TS流解析出单路视频ES”指的是在数字电视传输系统中,对Transport Stream (TS) 流进行解析,以提取出其中的Video Elementary Stream (ES)。TS流是一种用于传输多路音视频数据的协议,常用于数字电视广播、...
MPEG2_TS流,即MPEG-2传输流,是一种广泛应用于广播和存储媒体系统中的数据格式,主要用于传输和存储多个同步的音视频流。以下是对MPEG2_TS流基本概念和数据结构的深入分析。 #### 1. ES-Elementary Streams(原始...
根据给定的信息,本文将深入解析FFMpeg中MPEG2_TS流的解码流程,重点探讨mpegts.c文件中的关键部分以及整个解码过程的关键技术细节。 ### 一、FFMpeg中MPEG2_TS流解码的流程概述 #### 1.1 MPEG2协议简介 MPEG2...
描述中的"可以看码流视频"意味着该工具不仅具备分析能力,还可能提供实时预览功能,允许用户直接观看TS流中的视频内容,以便更好地理解和评估TS流的播放质量。 标签中的“TS”是传输流的缩写,是由国际电信联盟定义...