Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ FFmpeg解码时对音频重新采样_C++_Audio_Video_Ffmpeg_Mpeg2 Ts - Fatal编程技术网

C++ FFmpeg解码时对音频重新采样

C++ FFmpeg解码时对音频重新采样,c++,audio,video,ffmpeg,mpeg2-ts,C++,Audio,Video,Ffmpeg,Mpeg2 Ts,我的任务是构建一个解码器,从编码的mpegts网络流中为1个原始视频帧生成1个原始音频帧,这样用户就可以通过调用getFrames()使用API并准确地接收这两个帧 目前我正在用av_read_框架在一个线程中阅读,当数据包到来时解码,音频或视频;收集,直到一个视频包被击中。问题是通常在看到视频之前会收到多个音频包 av_读取_帧被阻塞,当采集到一定数量的音频数据时返回(mp2为1152个样本);以及解码该分组给出具有持续时间T(取决于取样器)的原始AVFrame;然而视频帧的持续时间通常大于T

我的任务是构建一个解码器,从编码的mpegts网络流中为1个原始视频帧生成1个原始音频帧,这样用户就可以通过调用getFrames()使用API并准确地接收这两个帧

目前我正在用av_read_框架在一个线程中阅读,当数据包到来时解码,音频或视频;收集,直到一个视频包被击中。问题是通常在看到视频之前会收到多个音频包

av_读取_帧被阻塞,当采集到一定数量的音频数据时返回(mp2为1152个样本);以及解码该分组给出具有持续时间T(取决于取样器)的原始AVFrame;然而视频帧的持续时间通常大于T(取决于fps),因此在它之前会接收多个音频帧

我猜我必须找到一种方法,在视频被点击时,将收集的音频帧合并成一个单独的帧。我想还需要重新采样和设置时间戳以与视频对齐。我不知道这是否有效


以这种方式同步视频和音频的最平滑方式是什么?

重新采样每秒更改采样数,例如从44 khz更改为32 khz。我不认为这是必要的。这是非常重要的,当然对于任意采样率对,通常(至少在这里)MPEG比视频流提前1秒提供音频。而且,你会得到25帧每秒的视频和48帧音频。您需要同步这些。我的计算表明,要接收1V的1A,需要1152×25=28.8k输入采样器。如果不是,如何在线更改samplerate?