我有一个大问题。我有一个从live555.com下载的视频“ tc10.264”。我无法播放使用videoview,exoplayer和vitamio sdk的视频 在android上。 我知道视频是编解码器。它不是mp4,flv等容器。 后来,我在Windows控制台上通过“ ffplay -f h264 tc10.264”播放了视频。 ffmpeg向我展示了此规范。 h264(基准),yubj420p和25 fps。
好的,这个视频存在。 之后,我从ubuntu上的虚拟机中下载了ffmpeg。然后,我用x264构建(编译)ffmpeg,如下所示。
我的目录路径类似于ffmpeg> x264,我从x264文件夹中为ffmpeg编译了libx264.a。
注意:我的Android手机在架构上具有armeabi_v7a
有build_android_arm.sh脚本。
#!/bin/bash
echo starting building ....
NDK=/home/lscodex/android-sdk/ndk-bundle
PLATFORM=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
PREFIX=./android/arm
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-static \
--enable-pic \
--host=arm-linux \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM
make clean
make
make install
}
build_one
echo Android ARM builds finished....
之后,我有一个名为android的文件夹,其中包含lib,include和bin文件。因此,我编译了如下所示的脚本以在ffmpeg文件夹中实现共享文件夹(“ .so”)。 有build_android_armeabi_v7a.sh脚本
#!/bin/bash
echo Android starting armeabi_v7a
NDK=/home/lscodex/android-sdk/ndk-bundle
PLATFORM=$NDK/platforms/android-19/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=armeabi_v7a
PREFIX=$(pwd)/android/$CPU
GENERAL="\
--enable-small \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=arm \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--extra-cflags="-I../x264/android/arm/include" \
--extra-ldflags="-L../x264/android/arm/lib" "
MODULES="\
--enable-gpl \
--enable-libx264"
H264TEST="\
--enable-encoder=libx264 \
--enable-encoder=libx264rgb \
--enable-decoder=h264 \
--enable-muxer=h264 \
--enable-demuxer=h264 \
--enable-parser=h264"
function build_ARMv7
{
./configure \
--target-os=android \
--prefix=$PREFIX \
${GENERAL} \
--sysroot=$PLATFORM \
--enable-shared \
${H264TEST} \
--disable-static \
--extra-cflags="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300" \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
--enable-zlib \
${MODULES} \
--disable-doc \
--enable-neon
make clean
make
make install
}
build_ARMv7
echo Android ARMv7-a builds finished
最后,我获得了另一个包含共享库的android文件夹。 我整合了android studio中的文件。我创建了CMakeLists.txt和cpp文件夹。 因此,我认为一切都正常。 此ndk代码可帮助我接收一段bugs_bunny.mp4视频。
extern "C"
JNIEXPORT jint JNICALL
Java_com_lscodex_just_videoplayertesting2_VideoProcessing_videoDuration(
JNIEnv *env,
jobject obj,
jstring input) {
AVFormatContext *pFormatCtx = NULL;
if(avformat_open_input(&pFormatCtx,convertStringFileToChar(env,input),NULL,NULL)<0){
throwException(env,"Could not open input file ");
loge("Could not open input file ");
return 0;
}
if (avformat_find_stream_info(pFormatCtx,NULL)<0){
throwException(env,"Failed to retrieve input stream information");
loge("Failed to retrieve input stream information");
return 0;
}
logd("I reached it here :) ");
int64_t duration = pFormatCtx->duration;
avformat_close_input(&pFormatCtx);
avformat_free_context(pFormatCtx);
return (jint) (duration / AV_TIME_BASE);
}
至少对于mp4视频格式。 所以,我的问题是,如何在exoplayer或videoview api上通过ffmpeg运行 tc10.264 编解码器视频格式?