IJKPlayer支持RTSP

/ 1评 / 3

最近做到了直播这块,后台提供的是RTSP视频流,考虑到开发速度就采用了IJKPlayer,但是默认的编译配置是没有支持RTSP的,需要去修改配置和部分代码来支持。
1、首先clone下来IJKPlayer,很简单;
2、切换到config文件夹下,修改module-lite.sh文件:

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"  #修改
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"  #添加

然后删除config文件夹下的module.sh,重新创建链接

ln -s module-lite.sh module.sh

3、修改源文件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;
}

4、开始编译
根目录执行 ./init-ios.sh 下载所需要的库
ios目录执行 ./compile-ffmpeg.sh clean 清理一下
ios目录执行 ./compile-ffmpeg.sh all 开始编译,等待。。

5、编译成功进入ios->IJKMediaPlayer文件夹,打开工程,分别在模拟器和真机环境下编译一遍

6、合并静态库

lipo -create ~/Desktop/1/IJKMediaFramework.framework/IJKMediaFramework ~/Desktop/2/IJKMediaFramework.framework/IJKMediaFramework -output ~/Desktop/IJKMediaFramework

然后将得到的这个静态文件复制到上面两个路径任何一个中,就得到了我们想要的静态IJKPlayer开发包。

一条回应:“IJKPlayer支持RTSP”

  1. 说道:

    多谢,经实验好用