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
求大家指教!!!
./configure --help in ffmpeg's directory.
./configure --help in ffmpeg's directory. 能不能详细点,大神?
大神解决了没有。。求解释
哈哈,已经解决了,支持 rtsp,编译出来只有13M.
加入那几个之后,还不行,要把 这个http的网络协议打开才行:# ./configure --list-protocols 这个地方全部开放, 不过也可以过滤掉一些,具体你可以试一下, 编完之后,查看config.h, 看看那个rtsp的宏是否已经打开了,
我现在测试 ,我的rtsp网络延时很慢,要5到6秒, 听说要改缓存, 正在查找....
另外还需要,注意你的视频,音频格式是否支持rtsp的播放, 网络缓存设置那个地方要加大,50ms, 似乎太短了
哈哈,不错, 在对 ijkMediaPlay 加点参数, 现在rtsp的码流播放速度很快啊, 没有延时.
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");
mark.
@fengbenpaao 大神,对支持rtsp的音频的处理能否指点一二?
@MaxZhangs 首先用pc播放器 看看你当前的 rtsp码流属于什么 音频,视频,格式, 然后编译的时候,再把那些格式打开, 这样你放出来的 rtsp就有声音有图片了;
我现在比较纠结的时候 1080p ijk播放很不流畅, ......卡卡卡卡
我照上面的修改,可以播放rtsp了,但遇到关掉player的时候,server没收到rtsp teardown的指令
这个大神有遇到吗?
@fengbenpaao 按照你说的设置好了参数,为什么还是有>1秒的延迟?
@fengbenpaao 我现在也是用ijkPlayer播放1080p的,卡顿严重,你解决了吗?
@allentsing 开启硬解码,但是不是所有手机都能支持到1080的硬解码,也是个悲剧
@fengbenpaao 开启硬解码之后,我的画面是黑的,有数据传过来,但是画面是黑的,你知道怎么回事吗?
mark
mark
Most helpful comment
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_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");