У меня большая проблема. У меня есть видео "tc10.264", которое я скачал с live555.com. Я не могу воспроизвести видео, которое использует videoview, exoplayer и vitamio sdk на android. Я знаю, что видео - это код. Это не контейнер, например mp4, flv и т. д. Позже я воспроизвел видео с помощью "ffplay -f h264 tc10.264" через консоль Windows. и ffmpeg показывает мне эту спецификацию. h264 (базовый), yubj420p и 25 кадров в секунду.
Хорошо, это видео существует. После этого я загрузил ffmpeg с Ubuntu на виртуальную машину. И я собираю (компилирую) ffmpeg с x264, как показано ниже.
мой путь к каталогу похож на ffmpeg> x264, и я скомпилировал libx264.a для ffmpeg из папки x264.
Примечание: мой телефон 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. Итак, я скомпилировал сценарий, показанный ниже, для создания общей папки (".so") в папке ffmpeg. есть скрипт 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. Я создал папку 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. Итак, мой вопрос: как я могу запустить видеоформат кодека tc10.264 через ffmpeg на exoplayer или на videoview api?
На самом деле, я пробовал mediaCodec с mediaPlayer, но я не просто пробовал его декодировать, я собираюсь взглянуть на это. @szatmary
@szatmary, эй, я пробовал использовать видеоформат tc10.264 в mediaCodec для декодирования, но mediaExtractor всегда выдает ошибку, что не удалось создать экземпляр экстрактора.
Проверьте результат сборки ffmpeg. Бьюсь об заклад, что у вас нет libx264, и ваш ffmpeg просто игнорирует ваши флаги x264
@DmitriiZ. привет, у меня есть файлы libx264.so и x264.h, x264_config.h. и я проверил вывод сборки ffmpeg и не увидел никаких ошибок. Также я интегрировал эти файлы в проект Android. Однако есть кое-что, чего я не понимаю, как мне добавить videoview api после преобразования видеокодека ".264" в mp4 для воспроизведения?
Вы пробовали расшифровать его с помощью MediaCodec?