Skip to content

ijkplayer怎么更精简的支持RTSP? #2259

Open
@ghost

Description

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

求大家指教!!!

Activity

ghost changed the title [-]ijkplayer怎么支持RTSP?[/-] [+]ijkplayer怎么更精简的支持RTSP?[/+] on Nov 12, 2016
bbcallen

bbcallen commented on Nov 14, 2016

@bbcallen
Contributor

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

ghost

ghost commented on Nov 14, 2016

@ghost

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

cqswzqcj

cqswzqcj commented on Nov 15, 2016

@cqswzqcj

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

fengbenpaao

fengbenpaao commented on Nov 28, 2016

@fengbenpaao

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

fengbenpaao

fengbenpaao commented on Nov 28, 2016

@fengbenpaao

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

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

fengbenpaao

fengbenpaao commented on Nov 28, 2016

@fengbenpaao

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

added a commit that references this issue on Dec 1, 2016
fengbenpaao

fengbenpaao commented on Dec 15, 2016

@fengbenpaao

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

fengbenpaao

fengbenpaao commented on Dec 15, 2016

@fengbenpaao

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");

dourgulf

dourgulf commented on Dec 15, 2016

@dourgulf

mark.

MaxZhangs

MaxZhangs commented on Dec 16, 2016

@MaxZhangs

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

fengbenpaao

fengbenpaao commented on Dec 22, 2016

@fengbenpaao

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

ipapamagic

ipapamagic commented on Jan 3, 2017

@ipapamagic

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

xu819241519

xu819241519 commented on Jan 20, 2017

@xu819241519

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

allentsing

allentsing commented on Jul 10, 2017

@allentsing

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

fengbenpaao

fengbenpaao commented on Jul 12, 2017

@fengbenpaao

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

allentsing

allentsing commented on Jul 12, 2017

@allentsing

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

HoQer

HoQer commented on May 15, 2018

@HoQer

mark

zkj3e

zkj3e commented on May 30, 2019

@zkj3e

mark

v-jibfen

v-jibfen commented on Sep 15, 2021

@v-jibfen

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @bbcallen@dourgulf@ipapamagic@zkj3e@xu819241519

        Issue actions

          ijkplayer怎么更精简的支持RTSP? · Issue #2259 · bilibili/ijkplayer