日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

移植ffplay媒体播放器和sdl2到Android平台

發(fā)布時間:2023/12/14 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移植ffplay媒体播放器和sdl2到Android平台 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

前述博文《基于FFmpeg和Android的音視頻同步播放實現(xiàn)》中,我們按照自己的方法實現(xiàn)了一個簡單的媒體播放器,并做了音視頻同步。但是這個程序在播放更多碼流時,遇到了一些問題,包括視頻解碼問題,同步時視頻卡頓等。我們在博文《在ubuntu16.04下測試ffplay程序》中也測試過ffplay這個強大的播放器,而我們也知道SDL基于Android平臺也有支持,所以我們可以將ffplay和sdl移植到Android平臺上來。

主要工作

  • 編譯FFmpeg的Android平臺動態(tài)庫,以實現(xiàn)視頻解碼;
  • 編譯SDL2的Android平臺動態(tài)庫,以支持對視頻顯示和音頻播放的芯片支持;
  • 移植ffplay程序到Android平臺,以實現(xiàn)一個基本的媒體播放器;
    FFmpeg和ffplay都在native層實現(xiàn)或編譯,SDL2一部分在native層編譯,另一部分平臺依賴需要在java層實現(xiàn),當然,SDL2均提供了參考代碼。
  • 源代碼版本

    FFmpeg基于當前最新的4.0.1版本;
    SDL2基于當前最新的SDL2-2.0.8版本;
    ffplay也是基于FFmpeg4.0.1附帶的源碼;

    編譯libffmpeg.so

    FFmpeg庫的編譯基于android-ndk-r14b在Ubuntu下編譯,注意采用standalone_toolchain的編譯鏈,可以參考https://blog.csdn.net/ericbar/article/details/80229592 , ndk采用r14b而沒有采用最新的版本,因為從r15b版本開始,FFmpeg代碼中引用stderr等標準輸入輸出函數(shù)會找不到。
    config.sh和make.sh需要做些修改,分別參考如下,

    #!/bin/bash FFMPEG_SRC_PATH=$(cd `dirname $0`; pwd)SYSROOT=/home/ffmpeg/work/toolchain/android/linux-x86_64/ndk-r14/android-19/arm/sysroot LIBPATH=/home/ffmpeg/work/toolchain/android/linux-x86_64/ndk-r14/android-19/arm/sysroot/usr/lib TOOLCHAIN=/home/ffmpeg/work/toolchain/android/linux-x86_64/ndk-r14/android-19/armexport PATH=$TOOLCHAIN/bin:$PATH export CROSS_PREFIX=arm-linux-androideabi- export CC="${CROSS_PREFIX}gcc " export CXX=${CROSS_PREFIX}g++ export LD=${CROSS_PREFIX}ld export AR=${CROSS_PREFIX}ar export STRIP=${CROSS_PREFIX}stripLDFLAGS="-lm -lz -Wl,-soname=libffmpeg.so,-z,noexecstack"PREFIX=ffout ADDI_CFLAGS="-marm"echo " " echo "please wait..." echo " "#cd $FFMPEG_SRC_PATH rm ./$PREFIX -rf make cleanecho " " echo "preparing to configure..." echo " "./configure \--prefix=$PREFIX \--enable-shared \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffprobe \--disable-doc \--disable-symver \--disable-programs \--disable-w32threads \--disable-os2threads \--disable-sdl2 \--tempprefix=$FFMPEG_SRC_PATH \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--target-os=linux \--arch=arm \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $ADDI_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAG# --sysinclude=$SYSROOT \

    下面make.sh里,需要把avdevice下的.o庫鏈接添加進來,

    #!/bin/bash FFMPEG_SRC_PATH=$(cd `dirname $0`; pwd)SYSROOT=/home/ffmpeg/work/toolchain/android/linux-x86_64/ndk-r14/android-19/arm/sysroot LIBPATH=/home/ffmpeg/work/toolchain/android/linux-x86_64/ndk-r14/android-19/arm/sysroot/usr/lib TOOLCHAIN=/home/ffmpeg/work/toolchain/android/linux-x86_64/ndk-r14/android-19/armexport TMPDIR=$FFMPEG_SRC_PATH export PATH=$TOOLCHAIN/bin:$PATH export CROSS_PREFIX=arm-linux-androideabi- export CC="$CCACHE ${CROSS_PREFIX}gcc " export CXX=${CROSS_PREFIX}g++ export LD=${CROSS_PREFIX}ld export AR=${CROSS_PREFIX}ar export STRIP=${CROSS_PREFIX}stripLDFLAGS="-lm -lz -Wl,-soname=libffmpeg.so,-z,noexecstack"CPU=arm PREFIX=ffout ADDI_CFLAGS="-marm"#make -j${NUMBER_OF_CORES} && make install || exit 1 make -j4 && make install || exit 1rm libavcodec/reverse.o libavcodec/log2_tab.o libavformat/log2_tab.o libavformat/golomb_tab.o \libswresample/log2_tab.o libavfilter/log2_tab.o libswscale/log2_tab.o libavdevice/reverse.o$CC -o $PREFIX/libffmpeg.so -shared $LDFLAGS $EXTRA_LDFLAGS --sysroot=$SYSROOT -L $LIBPATH \libavutil/*.o libavutil/arm/*.o libavcodec/*.o libavcodec/arm/*.o \libavformat/*.o libavfilter/*.o libswresample/*.o libswresample/arm/*.o \libswscale/*.o libswscale/arm/*.o compat/*.o libavdevice/*.ocp $PREFIX/libffmpeg.so $PREFIX/libffmpeg-debug.so ${STRIP} --strip-unneeded $PREFIX/libffmpeg.so

    編譯SDL2庫

    我們下載SDL2-2.0.8源碼后,解壓縮,直接進入SDL2-2.0.8目錄,首先需要設置NDK的環(huán)境變量,這里注意NDK不要采用類似FFmpeg編譯的standalone_toolchain方式,采用從Google官網(wǎng)下載的原始版本解壓縮即可,版本的話,使用android-ndk-r16b即可,參考下述命令即可啟動編譯,

    export ANDROID_NDK_HOME=/home/ffmpeg/work/android-ndk-r16b export PATH=$ANDROID_NDK_HOME:$PATH ndk-build -B NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk

    最后在SDL2-2.0.8\libs\armeabi-v7a下會生成libSDL2.so庫。

    移植ffplay

    ffplay程序基于eclipse來編譯,其中eclipse的ndk版本采用android-ndk-r13b;主要是一些頭文件依賴和編譯警告,需要做一些適當?shù)恼{(diào)整和修正。

    SDL2的java層適配

    SDL2的源碼里提供了相關(guān)參考,我們直接搬過來就行,代碼路徑位于,
    SDL2-2.0.8\android-project\app\src\main\java\org\libsdl\app
    當然,我們需要做一點修改,主要有如下幾點:
    1. SDLActivity.java中,主程序(main函數(shù))所在的so庫名是libfflay.so而不是libmain.so,這個是我在創(chuàng)建工程時選的so名字,所以要修改過來,大家可以根據(jù)自己實際名字修改。
    2. SDLActivity.java中,加載的so庫,由main修改成ffmpeg和ffplay;
    3. SDLActivity.java中,native層啟動的主程序名由SDL_main改成start,注意我們這里把ffplay源碼里的main函數(shù)改成了start函數(shù);

    GitHub源碼

    代碼修改部分比較瑣碎,這里不一一講述,媒體播放url在ffplay.c的input_filename全局變量初始化時直接賦值。

    請參考完整的源碼路徑:
    https://github.com/ericbars/ffplay

    總結(jié)

    以上是生活随笔為你收集整理的移植ffplay媒体播放器和sdl2到Android平台的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲综合在线五月 | 日韩欧美三级 | 亚洲午夜精品久久久久久app | 免费啊v在线观看 | 成人在线超碰 | 亚洲乱码视频在线观看 | 色涩网站 | 国产成人无码www免费视频播放 | 久久久久这里只有精品 | 91香蕉一区二区三区在线观看 | 国产视频不卡一区 | 1000部啪啪 | 搡老熟女国产 | 大肉大捧一进一出视频 | 超碰精品在线观看 | 久久精品资源 | 成人午夜精品视频 | 中文字幕亚洲精品在线 | 国产精品伦一区二区三区免费看 | 麻豆成人91精品二区三区 | www.国产色 | 午夜久久久久久久久久影院 | 51调教丨国产调教视频 | 一区在线观看视频 | 日本精品一区二区三区在线观看 | 久久美女免费视频 | 国产精品久久久久三级 | 加勒比综合| 丁香六月色 | 小嫩女直喷白浆 | 日韩欧美高清在线 | 久久aaa| 爱爱亚洲 | 国产欧美日韩视频在线观看 | 韩国三级中文字幕hd久久精品 | 天天干夜夜操视频 | 七七色影院 | 国产精品无码电影在线观看 | 国产亚洲成人av | 国产色片 | 亚洲а∨天堂久久精品2021 | 九九视频网 | 亚洲无卡视频 | 91精品国产综合久久久密臀九色 | 日韩99| 欧美日韩午夜精品 | 视色影院 | 比利时xxxx性hd极品 | 精品一区二区三区蜜桃 | 精品久久精品久久 | 国产二级视频 | 海角社区在线视频播放观看 | 天天精品综合 | 美女视频黄a视频全免费观看 | 嫩草视频入口 | 精品人妻一区二区三区蜜桃视频 | 国产成人a v | 久久小视频 | 国产精品丝袜黑色高跟鞋的设计特点 | 一本一道波多野结衣一区二区 | 亚洲综合在线观看视频 | 亚洲精品乱码久久久久久不卡 | 粗喘呻吟撞击猛烈疯狂 | 嫩草视频在线观看免费 | 蜜桃一区二区 | 黄色中文字幕 | 精品一区二区久久久久蜜桃 | 播播开心激情网 | 夜操操| 激情丁香网 | 波多野结衣av在线观看 | 黄色网页免费在线观看 | 成人性生交大片免费看 | 欧美二区在线 | 肥熟女一区二区三肥熟女 | 亚洲人xxx | 亚洲精品成人在线视频 | 超鹏在线视频 | 久青草视频在线观看 | 日韩黄色免费电影 | 国产传媒视频 | 国产精品久久久久久久久久免费看 | 福利电影一区二区三区 | 欧美亚洲综合在线 | 精品在线观看一区 | 国内av免费| 玉米地疯狂的吸允她的奶视频 | 色小说在线 | 日韩精品一区二区视频 | 丝袜国产视频 | av在线不卡免费 | 欧日韩精品 | 国产精品香蕉 | 91艹| 黄色视屏软件 | 一对一色视频聊天a | 理论片在线观看理伦片 | 波多野结衣中文字幕在线播放 | 成人免费观看cn |