zoukankan      html  css  js  c++  java
  • 音视频不同步问题的原因和解决方案

    FAQ:
        在播放视频的时候,尤其是网络视频或者高清视频,会有视频画面和对应的声音信息不同步的问题,这样的问题原因在哪里?如何解决?
     
    Resolve:
    避免音视频不同步现象有两个关键——
     
    一是在生成数据流时要打上正确的时间戳。如果数据块上打的时间戳本身就有问题,那么播放时再怎么调整也于事无补。假如,视频流内容是从0s开始的,假设10s时有人开始说话,要求配上音频流,那么音频流的起始时间应该是10s,如果时间戳从0s或其它时间开始打,则这个混合的音视频流在时间同步上本身就出了问题。打时间戳时,视频流和音频流都是参考参考时钟的时间,而数据流之间不会发生参考关系;也就是说,视频流和音频流是通过一个中立的第三方(也就是参考时钟)来实现同步的。
     
     第二个关键的地方,就是在播放时基于时间戳对数据流的控制,也就是对数据块早到或晚到采取不同的处理方法。图2.8中,参考时钟时间在0-10s内播放视频流内容过程中,即使收到了音频流数据块也不能立即播放它,而必须等到参考时钟的时间达到10s之后才可以,否则就会引起音视频不同步问题
     
    基于时间戳的播放过程中,仅仅对早到的或晚到的数据块进行等待或快速处理,有时候是不够的。如果想要更加主动并且有效地调节播放性能,需要引入一个反馈机制,也就是要将当前数据流速度太快或太慢的状态反馈给“源”,让源去放慢或加快数据流的速度。熟悉DirectShow的读者一定知道,DirectShow中的质量控制(Quality Control)就是这么一个反馈机制。DirectShow对于音视频同步的解决方案是相当出色的。但WMF SDK在播放时只负责将ASF数据流读出并解码,而并不负责音视频内容的最终呈现,所以它也缺少这样的一个反馈机制。
     
     
     

    ref:

    音视频同步原理解析
    http://blog.csdn.net/titer1/article/details/39613123

  • 相关阅读:
    springcolud 的学习(一),架构的发展史
    shiro框架的学习
    Mybatis分页插件PageHelper简单使用
    对于解决VS2015启动界面卡在白屏的处理方法
    C# 运行流程
    转:什么是DIP、IoC、DI
    IQueryable,IEnumerable,IList区别
    easyUi——datetimebox绑定数据失效
    前后端参数传递的学习笔记
    java 多线程学习总结
  • 原文地址:https://www.cnblogs.com/bluestorm/p/7068558.html
Copyright © 2011-2022 走看看