[bilibili/ijkplayer]ijkplayer怎么更精简的支持RTSP?

2024-08-20 287 views
5

1、我用module-default.sh是可以播放RTSP,但是打的包快500M,太大了。 2、现在是采用修改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" 然后修改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;

}

TO-----> 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;

}

然后编译,打包播放不了,我从网上搜到的开源视频流地址:rtsp://218.204.223.237:554/live/1/66251FC11353191F/e7ooqwcfbqjoo80j.sdp

求大家指教!!!

回答

9

./configure --help in ffmpeg's directory.

0

./configure --help in ffmpeg's directory. 能不能详细点,大神?

7

大神解决了没有。。求解释

2

哈哈,已经解决了,支持 rtsp,编译出来只有13M.

2

加入那几个之后,还不行,要把 这个http的网络协议打开才行:# ./configure --list-protocols 这个地方全部开放, 不过也可以过滤掉一些,具体你可以试一下, 编完之后,查看config.h, 看看那个rtsp的宏是否已经打开了,

我现在测试 ,我的rtsp网络延时很慢,要5到6秒, 听说要改缓存, 正在查找....

7

另外还需要,注意你的视频,音频格式是否支持rtsp的播放, 网络缓存设置那个地方要加大,50ms, 似乎太短了

1

哈哈,不错, 在对 ijkMediaPlay 加点参数, 现在rtsp的码流播放速度很快啊, 没有延时.

9

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 60); mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-fps", 0); mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "fps", 30); mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48); mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_YV12);

                    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0);
                    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "fflags", "nobuffer");

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "max-buffer-size", 1024); mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "min-frames", 3); mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 1); mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probsize", "4096"); mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzeduration", "2000000");

7

mark.

4

@fengbenpaao 大神,对支持rtsp的音频的处理能否指点一二?

2

@MaxZhangs 首先用pc播放器 看看你当前的 rtsp码流属于什么 音频,视频,格式, 然后编译的时候,再把那些格式打开, 这样你放出来的 rtsp就有声音有图片了;
我现在比较纠结的时候 1080p ijk播放很不流畅, ......卡卡卡卡

3

我照上面的修改,可以播放rtsp了,但遇到关掉player的时候,server没收到rtsp teardown的指令 这个大神有遇到吗?

1

@fengbenpaao 按照你说的设置好了参数,为什么还是有>1秒的延迟?

6

@fengbenpaao 我现在也是用ijkPlayer播放1080p的,卡顿严重,你解决了吗?

6

@allentsing 开启硬解码,但是不是所有手机都能支持到1080的硬解码,也是个悲剧

4

@fengbenpaao 开启硬解码之后,我的画面是黑的,有数据传过来,但是画面是黑的,你知道怎么回事吗?

4

mark

1

mark

2

@fengbenpaao 大神,rtsp 延迟优化现在有好的方案了么