我写了很少的程序,用于提取原始音频日期。我很忙,同时我将操作系统从Kubuntu 15.04更改为16.04。库在cmakelists.txt中动态链接
target_link_libraries(
ffmpeg
#[[ Linking ffmpeg libraries - START ------------------]]
"${CMAKE_SOURCE_DIR}/extern_libs/libffmpeg/lib/libavcodec.so"
"${CMAKE_SOURCE_DIR}/extern_libs/libffmpeg/lib/libavdevice.so"
"${CMAKE_SOURCE_DIR}/extern_libs/libffmpeg/lib/libavutil.so"
"${CMAKE_SOURCE_DIR}/extern_libs/libffmpeg/lib/libavfilter.so"
"${CMAKE_SOURCE_DIR}/extern_libs/libffmpeg/lib/libavformat.so"
"${CMAKE_SOURCE_DIR}/extern_libs/libffmpeg/lib/libswresample.so"
"${CMAKE_SOURCE_DIR}/extern_libs/libffmpeg/lib/libswscale.so"
#[[ Linking ffmpeg libraries - END --------------------]]
)
我开始重新使用我的代码,但代码不再起作用了。
if(av_read_frame(m_ctx, &avpkt) >= 0){
got_frame = 0;
avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt);
detectSampleFormat((AVSampleFormat)decoded_frame->format);
m_data->allocateMemory(m_duration, decoded_frame->channels);
m_resampler->initResampler(m_fmt, decoded_frame->channel_layout, decoded_frame->sample_rate, decoded_frame->nb_samples);
m_resampler->resampleAudioFrame(decoded_frame, m_data);
}
while(av_read_frame(m_ctx, &avpkt) >= 0){
got_frame = 0;
avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt);
m_resampler->resampleAudioFrame(decoded_frame, m_data);
}
解码帧应该包含channel_layout,通道数等信息......但是在执行程序期间,它们是0或空值。
任何人都可以帮我吗?我不清楚为什么它在不久前工作(我上次在3月份编写了这段代码)并且相同的代码不再起作用了。
编辑: 我发现了问题。从文件中读取的第一帧被损坏或者其他东西,所以我只是等待第一个正确的帧来初始化我的组件。
这个问题可以关闭。