Простой анализ Ijkplayer

1. Получить код:      

мерзавец клон https://github.com/Bilibili/ijkplayer.git ijkplayer-андроид

CD ijkplayer-андроид

мерзавец контроль -B последнее k0.8.8

 

2.        Перед Строить :

# Установить доморощенного, мерзавец, Yasm
рубин -e "$ (свернуться -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
заварить установить мерзавец
заварить установить Yasm
# Добавить эти строки в ~ / .bash_profile или ~ / .profile
# Экспорт ANDROID_SDK = <ваш путь SDK>
# Экспорт ANDROID_NDK = <ваш NDK путь>
# На Cygwin (не сопровождается)
# Установить мерзавец, сделать, Yasm


3. получить зависит от библиотеки с открытым исходным кодом      

./init-android.sh

Получить FFmpeg другой armabi библиотеки,

Получить libyuv и libtouchsound Lib библиотеки:

spacer.gif

Введение нескольких библиотек с открытым исходным кодом:

1.        jni4android является JNI инструмент генерации, он может обеспечить Java - классы, автоматически генерировать соответствующий JNI слой * .c файлы * .h файлы заголовков.

 

2. SoundTouch является открытой библиотекой источника звука, в основном в следующих функциях:        

Переменная скорость постоянной тон ( Мультиплексор TSM , шкала времени модификации ), изменение скорости аудио воспроизведения (быстро или медленно) , не затрагивая звуковой тон (Pitch) .

Тон не смещается высоты тона, , изменить звуковой тон при сохранении постоянной скорости воспроизведения аудио

передача тона, в то время как варьирование звуковых сигналов и скорости

 

3.        libyuv является Google с открытым исходным кодом для достижения различных YUV в RGB преобразование, поворот, масштабирование между библиотеками. Это кросс-платформенный, доступна в ОС Windows , Linux , Mac , Android и других операционных систем, x86 , x64 , ARM скомпилирован для работы на архитектуре для поддержки SSE , AVX , NEON и другие SIMD инструкции для ускорения.

 

4. Компиляция Android FFmpeg библиотеки:      

кд андроида / вно
./compile-ffmpeg.sh чистый
./compile-ffmpeg.sh все

FFmpeg Git репозиторий:


Различные armabi соответствующая FFmpeg библиотека:


FFmpeg сценарий сборки:

spacer.gif

 

Компиляция libavfiter и других объектных файлов:


5. Обобщение IJK :      

CD ..
./compile-ijk.sh все


По НДК скомпилирован ijkplayer каталог JNI папку


Пакет генерируется ijkffmpeg как SO .

Компиляция ijkplayer

6. Импорт AS (3.2):      

Файл-> Открыть, нажмите кнопку Выбрать android-> ijkplayer

 

AS внимание конфигурации к проблеме:

1.        Gradle версия переключателя. Вручную загрузить Gradle версию как gradle-4.6-all.zip в Gradle следующий файл.

2.        Jcenter вопросы загрузки тайм - аут, замените Aliyun .

 

Два . IJK анализ кода:

IjkPlayer В дополнении к предоставлению ijkPlayer API , но и обеспечивает Android родной MediaPlayer и Google его ExoPlayer API . ijkPlayer в VideoView от игрока фабричной модели Создать

image.png

IjkDemo общей архитектуры:

IJK Диаграмма .jpg

Демонстрационное неиспользованный SDL нарисована, Android использование может означать:

https://github.com/wanliyang1990/SDL2ForAndroid

 

ijkplayer временная диаграмма воспроизведения:


 Без имени файла .png

./android/ijkplayer_jni.c

IjkMediaPlayer_native_setup

 

ijkplayer_android.c

ijkmp_android_create

 

ffpipeline_android.c

ffpipeline_create_from_android

 

 

Игрок основной блок-схема:

4469440-08222cdd49ceae8d.png

ffplay.c основного кода процедуры вызывающего , как показано ниже:

image.pngspacer.gif

1. Данные чтения      

stream_open главным образом сделать следующие вещи :

  • Создание сохраненного видео / аудио данных перед декодированием videoq / audioq

  • Создание сохраненное видео / аудио декодирует данные pictq / sampq

  • Создание данных чтения потоков read_thread      

  • Создание видео - рендеринг нить video_refresh_thread

2. аудио и видео декодирования:      

  • Выбор режима декодирования видео

  • При настройке ffp-> mediacodec , будет уделять приоритетное внимание, чтобы попытаться открыть аппаратные ×××, если вы не поддерживают аппаратное декодирование, Soft Solutions включена.

  • Video_thread / audio_thread .

3. аудио и видео рендеринга      

Инициализация игрока , построить Vout объект: ijksdl -> S4a

MP-> ffplayer-> Vout = SDL_VoutAndroid_CreateForAndroidSurface ();

 

Звонки SDL_VoutDisplayYUVOverlayрисовать

SDL_VoutDisplayYUVOverlay (ffp-> Vout, ВП> BMP);

 

 

 


рекомендация

отblog.51cto.com/14367728/2402470