iOS集成IJKPlayer编译 FFmpeg编译 播放视频有画面没有声音 IJKPlayer AC3

1.下载源码
cd到你自己指定目录,直接git clone源码

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios

2、编译FFmpeg
cd到ijkplayer-ios目录下,执行./init-ios.sh脚本,下载FFmpeg。
进到ijkplayer-ios/ios目录下看到下面的显示,就是下载好了。
FFmpeg下载
cd到ios目录下,编译FFmpeg。

cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

先clean,提示clean success后,执行./compile-ffmpeg.sh all编译各个平台的FFmpeg库,等待编译,出现如下提示,就证明编译成功了。
FFmpeg编译成功
3.打包IJKMediaFramWork
打开IJKMediaPalyer工程,选中IJKMediaFramework,分别在真机和模拟器下进行build,在终端通过lipo -create -output 命令合并真机和模拟器下的FramWork。

lipo -create "/Users/mac/Library/Developer/Xcode/DerivedData/IJKMediaPlayer-cxhtchahkmpkfzfvutrrlurlbpjn/Build/Products/Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework" "/Users/mac/Library/Developer/Xcode/DerivedData/IJKMediaPlayer-cxhtchahkmpkfzfvutrrlurlbpjn/Build/Products/Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework" -output "/Users/mac/Desktop/IJKMediaFramework"

如果合并framework时报错“IJKMediaFramework have the same architectures (arm64) and can’t be in the same fat output file”。

在Target - Build Settings - Excluded Architectures添加Any iOS Simulator SDK,在Any iOS Simulator SDK 后面添加arm64,重新编译合并。

// 查看 framework 支持情况
lipo -info /Users/mac/Desktop/IJKMediaFramework

Any iOS Simulator SDK arm64
用新生成的这个替换之前真机、模拟器下面的framework文件。
将打包好的 IJKMediaFramework.framework 集成到项目中,
按照ReadMe集成文档,把需要的库都加到工程中,Xcode13不需要添加了。

开发中遇到的问题:
1.IJKPlayer 播放部分视频有画面没有声音。部分mp4文件有画面没有声音
获取原视频使用VLC播放器播放,cmd+i调出媒体信息,查看音视频编码,如下截图是音频编码格式是AC3,AC3(全称Audio Coding3)是杜比数码的同义词,杜比数码是一种高级音频压缩技术。AAC & AC3 & E-AC-3介绍
VLC查看音视频格式cmd+i
这种情况需要修改ijkplayer-ios/config/module-lite.sh文件,增加ac3解码支持,重新编译IJKPlayer。用新生成的IJKMediaFramework.framework替换项目中的IJKMediaFramework.framework。

#增加pcm
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_alaw"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_ulaw"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_mulaw"
#增加ac3
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=ac3"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=atrac3"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=atrac3p"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=eac3"

猜你喜欢

转载自blog.csdn.net/qq_32796151/article/details/129159383