audio - 播放:音视频同步算法

标签 audio video ffmpeg playback

我正在使用 ffmpeg 创建一个非常基本的视频播放器。库,我有所有的解码和重新编码,但我坚持音频视频同步。

我的问题是,电影有音频和视频流混合(交织),音频和视频以“突发”(多个音频包,然后是并列的视频帧)的方式出现,就像这样,每个包都有自己的时间戳:

A A A A A A A A V V V V A A A A A A A V V V V ...

A: decoded and re-encoded audio data chunk
V: decoded and re-encoded video frame

据说是为了防止在没有视频的情况下处理过多的音频,反之亦然。

现在我必须对“突发”进行解码,并及时将它们发送到音频/视频播放组件,我有点迷失在细节上。
  • 面对这类问题是否有“标准”策略/范式/模式?
  • 是否有解释使用技术的教程/文档/书籍?
  • 在一部编码良好的电影中,muxing 能走多远?

  • 因为我不期待这样的事情:
    AAAAAAAAAAA .... AAAAAAAAAAAAA x10000 VVVVVVVVVVVVVV x1000
    audio for the whole clip followed by video
    

    或这个:
    VVVVVVVVVVVV x1000 AAAAAAAAAAA...AAAAAAAAA x1000    
    all video frames followed by the audio
    

    发生在编码良好的视频中(毕竟,防止这种极端情况是混合的全部意义......)

    谢谢!

    更新 :由于我的描述可能不清楚,因此问题不在于流是怎样的,或者如何解码它们:整个音频/视频解复用、解码、重新缩放和重新编码都已设置和声音,以及每个数据 block 有自己的时间戳。

    我的问题是如何处理解码后的数据,而不会导致缓冲区溢出和欠载,并且通常会阻塞我的管道,所以我想这可能被认为是"dispatch"问题。

    最佳答案

    同步是容器的工作。每帧都将带有 PTS/DTS 或持续时间/CTS 的时间戳

    关于audio - 播放:音视频同步算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38804377/

    相关文章:

    android - 音视频Muxing问题

    javascript - 无法暂停当前声音并播放下一个声音

    c# - 解码h264视频

    linux - 如何从用户空间向 alsa 注册虚拟卡?

    ios - 在应用程序内打开 native iOS 音频输出目标选择器

    audio - 将 wav 和 mp4 与 ffmpeg 合并时音视频同步漂移缓慢

    python - 在 Python 中以编程方式生成视频或动画 GIF?

    api - 基于Youtube浏览器的上传API,它访问哪个 channel ?

    ffmpeg - 如何在 ffmpeg (-f) 中指定输入和输出的文件类型?

    FFMPEG:仅反转视频文件的一部分