Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
ghost opened this issue Nov 11, 2016 · 19 comments
Open

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

ghost opened this issue Nov 11, 2016 · 19 comments

Comments

@ghost
Copy link

ghost commented Nov 11, 2016

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

求大家指教!!!

@ghost ghost changed the title ijkplayer怎么支持RTSP? ijkplayer怎么更精简的支持RTSP? Nov 12, 2016
@bbcallen
Copy link
Contributor

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

@ghost
Copy link
Author

ghost commented Nov 14, 2016

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

@cqswzqcj
Copy link

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

@fengbenpaao
Copy link

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

@fengbenpaao
Copy link

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

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

@fengbenpaao
Copy link

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

aravindsg pushed a commit to aravindsg/ijkplayer that referenced this issue Dec 1, 2016
@fengbenpaao
Copy link

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

@fengbenpaao
Copy link

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
Copy link

mark.

@MaxZhangs
Copy link

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

@fengbenpaao
Copy link

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

@ipapamagic
Copy link

ipapamagic commented Jan 3, 2017

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

@xu819241519
Copy link

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

@allentsing
Copy link

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

@fengbenpaao
Copy link

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

@allentsing
Copy link

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

@HoQer
Copy link

HoQer commented May 15, 2018

mark

1 similar comment
@zkj3e
Copy link

zkj3e commented May 30, 2019

mark

@v-jibfen
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests