先去下載源碼
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.8.8
./init-ios.sh
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
下載下來后打開項目報錯誤
'libavformat/avformat.h' file not found
是因為./compile-ffmpeg.sh all失敗
./libavutil/arm/asm.S:50:9: error: unknown directive .arch armv7-a^make: *** [libavcodec/arm/aacpsdsp_neon.o] Error 1
?Xcode 已經(jīng)弱化了對 32 位的支持
打開compile-ffmpeg.sh中刪除armv7,?
FF_ALL_ARCHS_IOS8_SDK="armv7?arm64 i386 x86_64"
修改成:
FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"
...
再重新執(zhí)行:
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
適配rtsp
config文件夾下的module-lite.sh文件
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=rtp"
改為
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
cd /到config
rm module.sh //刪除原來的
ln -s module-lite.sh module.sh //用修改過的替換
找到ijkplayer-ios/ijkmedia/ijkplayer/ff_ffplay.c
修改
static int packet_queue_get_or_buffering(FFPlayer *ffp, PacketQueue *q, AVPacket *pkt, int *serial, int *finished)
{
? ? assert(finished);
? ? if (!ffp->packet_buffering)
? ? ? ? return packet_queue_get(q, pkt, 1, serial);
? ? while (1) {
? ? ? ? int new_packet = packet_queue_get(q, pkt, 0, serial);
? ? ? ? if (new_packet < 0)
? ? ? ? ? ? return -1;
? ? ? ? else if (new_packet == 0) {
? ? ? ? ? ? if (q->is_buffer_indicator && !*finished)
? ? ? ? ? ? ? ? ffp_toggle_buffering(ffp, 1);
? ? ? ? ? ? new_packet = packet_queue_get(q, pkt, 1, serial);
? ? ? ? ? ? if (new_packet < 0)
? ? ? ? ? ? ? ? return -1;
? ? ? ? }
? ? ? ? if (*finished == *serial) {
? ? ? ? ? ? av_packet_unref(pkt);
? ? ? ? ? ? continue;
? ? ? ? }
? ? ? ? else
? ? ? ? ? ? break;
? ? }
? ? return 1;
}
成
static int packet_queue_get_or_buffering(FFPlayer *ffp, PacketQueue *q, AVPacket *pkt, int *serial, int finished){
? ? while (1) {
? ? ? ? int new_packet = packet_queue_get(q, pkt, 1, serial);
? ? ? ? if (new_packet < 0){
? ? ? ? ? ? new_packet = packet_queue_get(q, pkt, 0, serial);
? ? ? ? ? ? if(new_packet < 0)
? ? ? ? ? ? ? ? return -1;
? ? ? ? }else if (new_packet == 0) {
? ? ? ? ? ? if (!finished)
? ? ? ? ? ? ? ? ffp_toggle_buffering(ffp, 1);
? ? ? ? ? ? new_packet = packet_queue_get(q, pkt, 1, serial);
? ? ? ? ? ? if (new_packet < 0)
? ? ? ? ? ? ? ? return -1;
? ? ? ? }
? ? ? ? if (finished == *serial) {
? ? ? ? ? ? av_free_packet(pkt);
? ? ? ? ? ? continue;
? ? ? ? }
? ? ? ? else
? ? ? ? ? ? break;
? ? }
? ? return 1;
}
然后
./init-ios.sh
cd ios./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
打開項目谨胞,編譯真機和模擬器亚情,獲得ijk庫
?lipo -create 真機地址 模擬器地址?-output 需要打印到的地址