`
罄竹未央
  • 浏览: 12480 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类
最新评论

音视频通讯同步原理

 
阅读更多
视频流中的DTS/PTS到底是什么?
DTS(解码时间戳)和PTS(显示时间戳)分别是解码器进行解码和显示帧时相对于SCR(系统参考)的时间戳。SCR可以理解为解码器应该开始从磁盘读取数据时的时间。
mpeg文件中的每一个包都有一个SCR时间戳并且这个时间戳就是读取这个数据包时的系统时间。通常情况下,解码器会在它开始读取mpeg流时启动系统时钟(系统时钟的初始值是第一个数据包的SCR值,通常为0但也可以不从0开始)。
DTS 时间戳决定了解码器在SCR时间等于DTS时间时进行解码,PTS时间戳也是类似的。通常,DTS/PTS时间戳指示的是晚于音视频包中的SCR的一个时 间。例如,如果一个视频数据包的SCR是100ms(意味着此包是播放100ms以后从磁盘中读取的),那么DTS/PTS值就差不多是200 /280ms,表明当SCR到200ms时这个视频数据应该被解码并在80ms以后被显示出来(视频数据在一个buffer中一直保存到开始解码)下 溢通常发生在设置的视频数据流相关mux率太高。
如果mux率是1000000bits/sec(意味着解码器要以1000000bits/sec的速率 读取文件),可是视频速率是2000000bits/sec(意味着需要以2000000bits/sec的速率显示视频数据),从磁盘中读取视频数据时 速度不够快以至于1秒钟内不能够读取足够的视频数据。这种情况下DTS/PTS时间戳就会指示视频在从硬盘中读出来之前进行解码或显示(DTS/PTS时间戳就要比包含它们的数据包中的SCR时间要早了)。
如今依靠解码器,这基本已经不是什么问题了(尽管MPEG文件因为应该没有下溢而并不完全符合MPEG标准)。一些解码器(很多著名的基于PC的播放器)尽可能快的读取文件以便显示视频,可以的话直接忽略SCR。
注意在你提供的列表中,平均的视频流速率为~3Mbps(3000000bits/sec)但是它的峰值达到了14Mbps(相当大,DVD限制在 9.8Mbps内)。这意味着mux率需要调整足够大以处理14Mbps的部分, bbMPEG计算出来的mux率有时候太低而导致下溢。
你计划让视频流速率这么高么?这已经超过了DVD的说明了,而且很可能在大多数独立播放其中都不能播放。如果你不是这么计划,我会从1增加mquant的值并且在视频设置中将最大码流设置为9Mbps以保持一个小一点的码流。
如果你确实想让视频码率那么高,你需要增大mux率。从提供的列表可以得出bbMPEG使用14706800bits/sec或者1838350bytes /sec的mux率(总数据速率为:1838350bytes/sec(14706800bits/sec)行)。你在强制mux率字段设置的值应该是以 bytes/sec为单位并被50整除。所以我会从36767(1838350/50)开始,一直增加直到不会再出现下溢错误为止。
音视频同步原理[ffmpeg]
ffmpeg对视频文件进行解码的大致流程:
1. 注册所有容器格式和CODEC: av_register_all()
2. 打开文件: av_open_input_file()
3. 从文件中提取流信息: av_find_stream_info()
4. 穷举所有的流,查找其中种类为CODEC_TYPE_VIDEO
5. 查找对应的解码器: avcodec_find_decoder()
6. 打开编解码器: avcodec_open()
7. 为解码帧分配内存: avcodec_alloc_frame()
8. 不停地从码流中提取中帧数据: av_read_frame()
9. 判断帧的类型,对于视频帧调用: avcodec_decode_video()
10. 解码完后,释放解码器: avcodec_close()
11. 关闭输入文件:av_close_input_file()
output_example.c 中AV同步的代码如下(我的代码有些修改),这个实现相当简单,不过挺说明问题。
音视频同步-时间戳
媒体内容在播放时,最令人头痛的就是音视频不同步。从技术上来说,解决音视频同步问题的最佳方案就是时间戳:首先选择一个参考时钟(要求参考时钟上的时间是线性递增的);生成数据流时依据参考时钟上的时间给每个数据块都打上时间戳(一般包括开始时间和结束时间);在播放时,读取数据块上的时间戳,同时参考当前参考时钟上的时间来安排播放(如果数据块的开始时间大于当前参考时钟上的时间,则不急于播放该数据块,直到参考时钟达到数据块的开始时间;如果数据块的开始时间小于当前参考时钟上的时间,则“尽快”播放这块数据或者索性将这块数据“丢弃”,以使播放进度追上参考时钟)。
可见,避免音视频不同步现象有两个关键——一是在生成数据流时要打上正确的时间戳。如果数据块上打的时间戳本身就有问题,那么播放时再怎么调整也于事无补。假如,视频流内容是从0s开始的,假设10s时有人开始说话,要求配上音频流,那么音频流的起始时间应该是10s,如果时间戳从0s或其它时间开始打,则这个混合的音视频流在时间同步上本身就出了问题。打时间戳时,视频流和音频流都是参考参考时钟的时间,而数据流之间不会发生参考关系;也就是说,视频流和音频流是通过一个中立的第三方(也就是参考时钟)来实现同步的。第二个关键的地方,就是在播放时基于时间戳对数据流的控制,也就是对数据块早到或晚到采取不同的处理方法。图2.8中,参考时钟时间在0-10s内播放视频流内容过程中,即使收到了音频流数据块也不能立即播放它,而必须等到参考时钟的时间达到10s之后才可以,否则就会引起音视频不同步问题。
基于时间戳的播放过程中,仅仅对早到的或晚到的数据块进行等待或快速处理,有时候是不够的。如果想要更加主动并且有效地调节播放性能,需要引入一个反馈机制,也就是要将当前数据流速度太快或太慢的状态反馈给“源”,让源去放慢或加快数据流的速度。熟悉DirectShow的读者一定知道,DirectShow中的质量控制(Quality Control)就是这么一个反馈机制。DirectShow对于音视频同步的解决方案是相当出色的。但WMF SDK在播放时只负责将ASF数据流读出并解码,而并不负责音视频内容的最终呈现,所以它也缺少这样的一个反馈机制。
音视频同步通讯SDK源码包分享:
Android:http://down.51cto.com/data/711001
Windows:http://down.51cto.com/data/715497
Linux:http://download.csdn.net/detail/weixiaowenrou/5169796
IOS:http://down.51cto.com/data/715486
WEB:http://down.51cto.com/data/710983
分享到:
评论

相关推荐

    音视频即时通讯(Android)

    AnyChatCoreSDK_Android_V1.5可能就是这样一个P2P音视频通讯的SDK,它提供了完整的解决方案,包括信令控制、音视频数据传输等功能。 在实际开发过程中,还需要考虑其他因素,例如网络条件的变化、设备性能差异、...

    视频编解码音视频通讯代码

    实现音视频通讯的关键技术包括网络传输协议(如RTP/RTCP、WebRTC)、同步机制、丢包恢复策略等。VC++可以借助Windows SDK中的相关组件,如Winsock进行网络编程,结合音视频编解码技术,实现跨平台的通讯功能。 在...

    视频音频通讯程序 VC开发

    5. **多线程编程**:为了保证音视频通讯的实时性和流畅性,程序往往需要在不同的线程中处理不同的任务,如视频编码在一个线程,网络传输在另一个线程。VC++提供了多线程支持,开发者需要掌握线程同步、互斥量等概念...

    IM即时通讯音视频server,登录注册调用demo

    在这个“IM即时通讯音视频server,登录注册调用demo”中,我们将探讨如何构建一个支持音频和视频功能的IM服务器,以及相关的登录和注册过程的实现。 1. **即时通讯系统架构**: - IM系统通常由客户端应用程序和...

    c#编写的局域网视频会议软件,实现了音频通讯和视频通讯

    标题中的“c#编写的局域网视频会议软件,实现了音频通讯和视频通讯”表明了这是一个使用C#编程语言开发的、在局域网环境中运行的视频会议应用程序,它具备了音频和视频通信功能。这样的软件通常涉及到网络编程、...

    RTC.rar_RTC_visual c_视频聊天_音视频_音视频聊天

    总的来说,RTC技术是构建实时通讯应用的关键,结合Visual C++可以实现高度定制化的音视频解决方案。对于开发者来说,理解RTC的基本原理和工作流程,以及如何在实际项目中运用,是非常有价值的知识。

    android视频语音源码-anychat

    Anychat是这个开源项目的核心组件,它是一个专业的实时音视频通讯引擎,广泛应用于在线教育、远程医疗、游戏社交等多个领域。Anychat提供了高效稳定的音视频编码解码能力,确保了在不同网络环境下的流畅体验。 1. *...

    JMF的音视频实时交互及存储的具体实现

    3. 视频聊天应用:如Skype、QQ等即时通讯软件的早期版本可能基于JMF实现了音视频通话功能。 六、JMF的局限性和替代方案 虽然JMF提供了一套全面的多媒体处理能力,但其更新较慢,不支持新的媒体格式和编码标准。因此...

    电信设备-视频通讯系统.zip

    5. 多点会议控制:MCU(多点控制单元)是多点视频通讯的关键,它负责处理多个参与者之间的音视频流切换、混合和同步,确保会议的正常进行。 6. 用户界面与交互:良好的用户体验是视频通讯系统成功的关键。界面设计...

    视频通讯,操控串口

    此外,网络条件、带宽管理、音视频同步等问题也是视频通讯过程中需要考虑的关键因素。 接着,我们来看“串口控制232”。串行通信,即RS-232,是一种广泛用于设备间的通信协议,特别适合短距离、低速率的数据传输。...

    即时通讯工作原理.docx

    ### 即时通讯工作原理详解 #### 一、引言 即时通讯(Instant Messenger,简称IM)是指能够实时发送和接收互联网消息等的业务。它不仅限于文本聊天,还包括语音通话、视频会议、文件传输等多种功能。本文将详细介绍...

    基于Andriod的语音即时通讯软件设计与实现.doc

    【即时通讯技术】即时通讯(Instant Messaging,IM)是一种实时通信技术,允许用户通过网络进行文字、语音、视频和文件的交互。随着互联网技术的进步,即时通讯已经从PC端发展到移动端,尤其在智能手机普及的背景下...

    音视频设备与系统工程课程系列:4-2多功能会议系统的主要设备.docx

    它们采用高可靠的VGA处理芯片,具备断电记忆、LCD显示、VGA与音频同步或分离切换等功能,支持RS232通讯接口,兼容多种中控系统,方便集中管理。 三、AV矩阵切换器 AV矩阵切换器则用于处理复合视频和立体声音频信号...

    C#即时通讯+视频会议 .

    3. **音视频服务**:处理音视频的编码、传输和解码,以及同步问题。 4. **服务器集群**:为了处理高并发和负载均衡,通常需要分布式服务器架构。 5. **安全性**:包括数据加密、防止DDoS攻击、用户隐私保护等。 6...

    P2P即时通讯 仿MSN源码

    我们将从P2P网络原理、即时通讯的核心功能、文件传输机制、语音视频聊天实现以及Delphi在开发中的应用等方面进行详细介绍。 首先,P2P(Peer-to-Peer)网络是一种分布式网络架构,其中每个参与者(节点)既是服务的...

    优秀的IP网络语音通讯软件Speak Fleely源代码

    vat协议则是VMS(Visual Memory System)环境下的一种音频/视频传输协议,与RTP类似,用于确保音视频数据的实时传输和质量。 此外,Speak Fleely具备广播发送和按组进行多点传送的功能,这在多人会议和协作场景中...

    视频会议源码

    在视频会议中,这种库通常用于实现实时音视频流的传输,包括TCP/IP协议的使用,确保数据的可靠传输,以及UDP协议的利用,以实现低延迟的数据交换。此外,可能还会涉及到RTCP(实时传输控制协议)和RTP(实时传输协议...

    qq微信即时通讯

    即时通讯应用往往还提供音视频通话功能,这涉及到音频编码解码(如Opus、AAC)、视频编码解码(如H.264)、网络传输优化(如RTP/RTCP、ICE、STUN/TURN)等复杂技术。 7. **安全性** 保护用户隐私和数据安全至关...

    即时通讯系统源码 飞机即时通讯源码 适配iOS安卓系统源码.zip

    下面将详细讨论即时通讯系统的基本概念、设计原理、以及iOS和Android平台上的实现技术。 即时通讯(Instant Messaging,简称IM)系统是一种允许用户实时发送和接收文本、语音、图像、视频等多种类型信息的应用。它...

    C#视频通信系统

    【C#视频通信系统】是一种基于C#编程语言开发的实时通信应用,主要功能是实现局域网内的多人音视频聊天以及单对单的通信。这个系统的核心在于它集成了音视频编解码技术,网络传输协议,以及用户界面设计等多个IT领域...

Global site tag (gtag.js) - Google Analytics