原生库兼容16kb对齐
请问目前最新的demo有兼容到原生库16kb对齐吗,目前大部分都是采用原生库4kb对齐。
感谢你提的优化项,后续准备支持16k页内存
你好请问框架支持H265、H264转码吗,例如H265编码的AVI格式转MP4格式适用吗?
支持h264、h265解码,支持h264编码
请问转码avi格式视频到MP4格式,一直不成功,解码音频出错了,尝试了一些ffmpeg命令也都没能正常转码成功还是没能成功。 报错日志如下: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (? (?) -> aac (native)) Decoder (codec pcm_u8) not found for input stream #0:1 from native msg=Decoder (codec pcm_u8) not found for input stream #0:1 Conversion failed! 如果采用跳过所有音频流单独转码视频流命令能够正常转码; 请问需要怎样修改ffmpeg命令或更新某些库能兼容到音视频转码的好方式; 谢谢
ffmpeg 交叉编译支持 16kb page size:
ffmpeg 依赖 x264,所以要先交叉编译它:
mkdir ffmpeg-android
cd ffmpeg-android
git clone https://code.videolan.org/videolan/x264.git
cd x264
创建 build.sh :
#!/bin/bash
# ===== CONFIGURATION =====
NDK=/home/lingyunxiao/dev/android-sdk/ndk/21.4.7075529
API=28
# =========================
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export TARGET=aarch64-linux-android
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export AR=$TOOLCHAIN/bin/llvm-ar
export LD=$TOOLCHAIN/bin/ld
./configure \
--prefix=../arm64-v8a \
--enable-static \
--enable-pic \
--disable-cli \
--host=aarch64-linux-android \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
--sysroot=$TOOLCHAIN/sysroot \
--extra-cflags="-fPIE -fPIC" \
--extra-ldflags="-pie"
make clean
make -j$(nproc)
make install
echo "Build complete!"
执行 build.sh,完成后确认 ffmpeg-android/arm64-v8a 有 x264 相关的东西,比如 x264.h libx264.a 等。
接下来进入重点:
在 ffmpeg-android 同级目录下
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
切换到 release/6.0 分支
创建 build_ffmpeg_one.sh 文件:
#!/bin/bash
make clean
set -e
archbit=64
if [ $archbit -eq 32 ];then
echo "build for 32bit"
ARCH='arm'
CPU='armv7-a'
ABI='armeabi-v7a'
API=28
PLATFORM='armv7a'
PLATFORM_ARCH='arm'
ANDROID='androideabi'
OPTIMIZE_CFLAGS="-march=$CPU -mfpu=neon -mfloat-abi=softfp -marm"
elif [ $archbit -eq 8664 ];then
echo "build for x86_64bit"
ARCH='x86_64'
CPU='x86-64'
ABI='x86_64'
API=28
PLATFORM='x86_64'
PLATFORM_ARCH='x86_64'
ANDROID='android'
OPTIMIZE_CFLAGS="-march=$CPU -mfpu=neon -mfloat-abi=softfp"
else
echo "build for 64bit"
ARCH='aarch64'
CPU='armv8-a'
ABI='arm64-v8a'
API=28
PLATFORM='aarch64'
PLATFORM_ARCH='arm64'
ANDROID='android'
OPTIMIZE_CFLAGS="-march=$CPU -mfpu=neon -mfloat-abi=softfp"
fi
uname=`uname`
if [ $uname = "Darwin" ];then
echo "compile on mac"
COMPILE_PLAT="darwin"
elif [ $uname = "Linux" ]; then
echo "compile on linux"
COMPILE_PLAT="linux"
else
echo "don't support $uname"
fi
export NDK=/home/lingyunxiao/dev/android-sdk/ndk/21.4.7075529
export TOOL=$NDK/toolchains/llvm/prebuilt/$COMPILE_PLAT-x86_64
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$COMPILE_PLAT-x86_64/bin
export SYSROOT=$NDK/toolchains/llvm/prebuilt/$COMPILE_PLAT-x86_64/sysroot
export CROSS_PREFIX=$TOOLCHAIN/$ARCH-linux-$ANDROID-
export CC=$TOOLCHAIN/$PLATFORM-linux-$ANDROID$API-clang
export CXX=$TOOLCHAIN/$PLATFORM-linux-$ANDROID$API-clang++
export PLATFORM_API=$NDK/platforms/android-$API/arch-$PLATFORM_ARCH
export PREFIX=../ffmpeg-android/$ABI
export PREFIX2=/usr/local
export ADDITIONAL_CONFIGURE_FLAG="--cpu=$CPU"
THIRD_LIB=$PREFIX
THIRD_LIB2=$PREFIX2
export EXTRA_CFLAGS="-Os -fPIC $OPTIMIZE_CFLAGS -I$THIRD_LIB/include"
export EXTRA_LDFLAGS="-lc -lm -ldl -llog -lgcc -lz -landroid -L$THIRD_LIB/lib -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384"
function build_one() {
./configure \
--target-os=android \
--prefix=$PREFIX \
--cross-prefix=$CROSS_PREFIX \
--pkg-config=/usr/bin/pkg-config \
--enable-cross-compile \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC \
--cxx=$CXX \
--nm=$TOOLCHAIN/$ARCH-linux-$ANDROID-nm \
--strip=$TOOLCHAIN/$ARCH-linux-$ANDROID-strip \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="$EXTRA_CFLAGS" \
--extra-ldflags="$EXTRA_LDFLAGS" \
--enable-hwaccels --enable-static --disable-shared --disable-doc --enable-neon --enable-asm --disable-small --enable-jni --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-debug --enable-gpl --disable-avdevice --disable-indevs --disable-outdevs --enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale --enable-avfilter --enable-network --enable-bsfs --disable-postproc --enable-filters --enable-encoders --enable-libx264 --enable-encoder='libx264' --disable-encoder='a64multi,a64multi5,alias_pix,amv,apng,aptx,aptx_hd,asv1,asv2,avrp,avui,cinepak,cljr,comfortnoise,dpx,ffvhuff,fits,hap,ilbc_at,mlp,nellymoser,pam,pbm,pcx,pgm,pgmyuv,ppm,prores,prores_aw,prores_ks,qtrle,r10k,r210,ra_144,roq,roq_dpcm,rv10,rv20,s302m,sbc,sgi,snow,sunrast,svq1,targa,tta,utvideo,v210,v308,v408,v410,vc2,wrapped_avframe,xbm,xface,xsub,xwd,y41p,zmbv' --disable-decoders --enable-decoder='mjpeg,mpeg4,h263,h264,flv,hevc,wmv3,msmpeg4v3,msmpeg4v2,msvideo1,vc1,mpeg1video,mpeg2video,aac,ac3,ac3_fixed,m4a,amrnb,amrwb,vorbis,wmav2,truehd,tscc,tscc2,dvvideo,msrle,cinepak,indeo5,vp8,vp9,av1,mp3float,mp3,mp3adufloat,mp3adu,mp3on4float,mp3on4,aac_fixed,aac_latm,eac3,png,wmav1,wmv1,wmv2,pcm_alaw,pcm_dvd,pcm_f16le,pcm_f24le,pcm_f32be,pcm_f32le,pcm_f64be,pcm_f64le,zlib,flac,opus,mlp,pcm_s16be,pcm_s16le,pcm_s24be,pcm_s24le,pcm_s32be,pcm_s32le,pcm_s64be,pcm_s64le,pcm_mulaw,alac,adpcm_ms,pcm_u16be,pcm_u16le,pcm_u24be,pcm_u24le,pcm_u32be,pcm_u32le,pcm_vidc,pcm_zork,adpcm_ima_qt,adpcm_ima_wav,gif' --enable-muxers --enable-parsers --enable-nonfree --enable-protocols --disable-openssl --enable-protocol=https --disable-demuxers --enable-demuxer='aac,ac3,alaw,amr,amrnb,amrwb,ape,asf,asf_o,avi,cavsvideo,codec2,concat,dnxhd,eac3,flac,flv,gif,gif_pipe,h263,h264,hevc,hls,image2,image2pipe,jpeg_pipe,lrc,m4v,matroska,webm,mjpeg,mov,mp4,m4a,3gp,mp3,mpeg,mpegts,mv,ogg,png_pipe,realtext,rm,rtp,rtsp,pcm_s16be,pcm_s16le,pcm_s32be,pcm_s32le,sdp,srt,swf,vc1,wav,webm_dash,manifest,xmv,pcm_f32be,pcm_f32le,pcm_f64be,pcm_f64le,mpegvideo,mulaw,sami,srt' \
$ADDITIONAL_CONFIGURE_FLAG
make
make install
}
build_one
function link_one_ffmpeg() {
$TOOLCHAIN/$ARCH-linux-$ANDROID-ld -rpath-link=$PLATFORM_API/usr/lib -L$PLATFORM_API/usr/lib \
-L$PREFIX/lib -soname libffmpeg.so \
-shared -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so \
$PREFIX/lib/libavcodec.a \
$PREFIX/lib/libavfilter.a \
$PREFIX/lib/libswresample.a \
$PREFIX/lib/libavformat.a \
$PREFIX/lib/libavutil.a \
$PREFIX/lib/libswscale.a \
$PREFIX/lib/libx264.a \
-lc -lm -lz -ldl -llog -landroid --dynamic-linker=/system/bin/linker $TOOL/lib/gcc/$ARCH-linux-$ANDROID/4.9.x/libgcc_real.a
}
link_one_ffmpeg
#mp3lame
#--enable-libmp3lame \
#--enable-encoder=libmp3lame \
#x264
#--enable-libx264 \
#--enable-encoder=libx264 \
#https
#--enable-openssl \
#--enable-protocol=https \
#libx264: require_pkg_config --> check_pkg_config
执行 build_ffmpeg_one.sh,这个脚本的配置基于主项目的同名文件,由于交叉编译 mp3lame、openssl(https) 失败,所以被我 disable 了。 顺便提一下,ndk 21 已经是极限,再往上升版本就会由于找不到某些文件编译失败,如果有突破的敬请指教一下。 为了跑模拟器想编译出 x86_64 版本,但也是失败告终,求指教。
Hãy cho tôi một độ nhay redmi 9a ff
@yuyingfeng1989 @vince-styling 最新版已兼容ffmpe的16kb对齐
@yuyingfeng1989 @vince-styling 最新版已兼容ffmpe的16kb对齐
你好,请教下如何使用ffmpeg源码在linux下编译出支持16kb的,尝试很多次编译的要么还是4kb,要么编译不过去
@yuyingfeng1989 @vince-styling 最新版已兼容ffmpe的16kb对齐
你好,请教下如何使用ffmpeg源码在linux下编译出支持16kb的,尝试很多次编译的要么还是4kb,要么编译不过去
老板,问问题要专业点,这样问谁知道怎么回你