IJKMediaFramework集成支持RTPS和HTTPS

目的

因为项目中用到了IJKMediaFramework这个直播的框架。不小心发现无法播放RTPS的流地址,所以网上各种资料,各种尝试。

本文不会有很长的内容和步骤的介绍,具体步骤我给出参考的地址,也是一位简书的小伙伴写的,已经很详细了。这里我就提出如何把RTPS和HTTPS都支持,整合在一起。

关键步骤

1.支持HTTPS

在模块文件中加入此行代码。我的编译是在module-lite.sh这个文件。

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"

2.支持RTPS

1.修改模块文件

首先将模块文件(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"
2.修改ff_ffplay.c文件

我是直接下载的zip包,而不是走git的拉下来的代码。但是应该差别不大。我的路径是ijkplayer-ios/ijkplayer/ff_ffplay.c。将文件中的方法替换成下面的方法即可。

static int packet_queue_get_or_buffering(FFPlayer *ffp, PacketQueue *q, AVPacket *pkt, int *serial, int *finished){
    if (!ffp->packet_buffering)
        return packet_queue_get(q, pkt, 1, serial);
    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 (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;
}

结尾

首先给出我参考的步骤链接,除了文中提出的支持RTPS部分加入,其它可按照此文步骤去操作。并且小伙伴不用担心不支持armv7会不会有什么不好的影响。我的项目已经顺利上线,只是不支持iPhone5s之前的机器也就是必须要64位的手机。

最后再唠叨一下,如果你有好的想法或者好的建议都可以给我留言,可能我回复的没那么及时,但是我看到了一定会给你回复的。我希望可以和你们一起进步。

推荐阅读更多精彩内容