我正在使用ffmpeg实现音频解码器.在阅读音频甚至寻求已经有效的时候,我无法找到一种方法来清除缓冲区后寻求所以当应用程序在搜索后立即开始读取音频时我没有任何文物.
avcodec_flush_buffers似乎对内部缓冲区没有任何影响.所有解码器(mp3,aac,wma,...)都会出现此问题,但PCM/WAV(由于未压缩音频,因此不使用内部缓冲区来保存数据以进行解码).
代码片段很简单:
av_seek_frame(audioFilePack->avContext, audioFilePack->stream, posInTimeFrame, AVSEEK_FLAG_ANY);
avcodec_flush_buffers(audioFilePack->avContext->streams[audioFilePack->stream]->codec);
Run Code Online (Sandbox Code Playgroud)
解释:
audioFilePack->avContext = FormatContext
audioFilePack->stream = Stream Position (also used to read audio packets)
audioFilePack->avContext->streams[audioFilePack->stream]->codec = CodecContext for the codec used
Run Code Online (Sandbox Code Playgroud)
关于我应该做什么的任何想法,我可以寻求并获得没有剩余的音频?谢谢!
我花了很多时间试图弄清楚为什么在尝试链接到ffmpeg时仍然会得到"未定义的引用".我已经阅读了大部分(如果不是所有)有关该主题的帖子和网站,所以我想我在这里遗漏了一些东西,我希望你能帮助我.
是)我有的:
我使用的是Windows 7 + cygwin + crystax r4.我使用RockPlayer的ffmpeg源编译了FFMPEG以及我做过的一些修改(仅包括/排除解复用程序,解码器,编码器......)编译后,我得到:
共享库也不会放在project/lib/armeabi/libffmpeg.so上
编译后,我尝试编译我的项目并链接它.虽然我的.cpp编译正常,但我得到许多未定义的引用.
这是我的构建脚本:
NDK=/cygdrive/c/Gabriel/Desenvolvimento/SDKs/Android/android-ndk-r4-crystax
PLATFORM=$NDK/build/platforms/android-8/arch-arm/
PREBUILT=$NDK/build/prebuilt/windows/arm-eabi-4.4.0
function build_one
{
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=arm \
--cc=$PREBUILT/bin/arm-eabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-eabi- \
--nm=$PREBUILT/bin/arm-eabi-nm \
--sysroot=$PLATFORM \
--extra-cflags=" -O2 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
--disable-shared \
--enable-static \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
--disable-stripping \
--disable-debug \
--disable-symver \
--disable-ffprobe \
--disable-devices \
--disable-avfilter \
--disable-swscale …Run Code Online (Sandbox Code Playgroud)