【发布时间】:2017-07-12 07:35:21
【问题描述】:
我找不到任何有关av_interleaved_write_frame 处理视频和音频数据包方式的信息。
我有来自 2 个线程的多个音频和视频数据包。每个线程调用write_video_frame 或write_audio_frame,锁定互斥体,初始化 AVPacket 并将数据写入 .avi 文件。
AVCodecContext 和 AVFOrmatContext 的初始化没问题。
-- 编辑 1--
音频和视频来自外部来源(麦克风和摄像头),并被捕获为未经任何压缩的原始数据(即使是视频)。 我使用 h264 对视频进行编码,对音频 (PCM) 不进行压缩。
捕获的音频为:16 位、44100khz、立体声
拍摄的视频为 25FPS
问题:
1) 如果我一次写入多个视频数据包(比如说 25 个数据包/秒)和一个音频数据包/秒,会不会有问题。
答案:显然不是,只要 pts 和 dts 管理好,函数 av_interleaved_write_frame 应该能够管理那种数据
这意味着我每秒拨打av_interleaved_write_frame 25 次进行视频写作,而仅拨打 1 次进行音频写作。这可能是个问题吗?如果是我该如何处理这种情况?
2) 在这种情况下如何管理 pts 和 dts ?这似乎是我的应用程序中的一个问题,因为我无法正确呈现 .avi 文件。我可以对视频和音频使用实时时间戳吗?
回答:这里最好的做法是使用在捕获音频/视频时给出的时间戳作为此类应用程序的 pts 和 dts。所以这些不完全是实时时间戳(来自挂钟),而是媒体捕获时间戳。
感谢您的宝贵建议。
【问题讨论】:
标签: c++ windows multithreading audio ffmpeg