Как я могу разработать формат кодека 264 дюймов, работающий в VideoView API?

У меня большая проблема. У меня есть видео "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?

szatmary 31.07.2018 18:07

На самом деле, я пробовал mediaCodec с mediaPlayer, но я не просто пробовал его декодировать, я собираюсь взглянуть на это. @szatmary

lscodex 31.07.2018 18:25

@szatmary, эй, я пробовал использовать видеоформат tc10.264 в mediaCodec для декодирования, но mediaExtractor всегда выдает ошибку, что не удалось создать экземпляр экстрактора.

lscodex 02.08.2018 11:11

Проверьте результат сборки ffmpeg. Бьюсь об заклад, что у вас нет libx264, и ваш ffmpeg просто игнорирует ваши флаги x264

Dmitrii Z. 03.08.2018 15:20

@DmitriiZ. привет, у меня есть файлы libx264.so и x264.h, x264_config.h. и я проверил вывод сборки ffmpeg и не увидел никаких ошибок. Также я интегрировал эти файлы в проект Android. Однако есть кое-что, чего я не понимаю, как мне добавить videoview api после преобразования видеокодека ".264" в mp4 для воспроизведения?

lscodex 04.08.2018 08:26
0
5
81
0

Другие вопросы по теме