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

直播码流不能播放 #70

Closed
psnow opened this issue Aug 25, 2014 · 10 comments
Closed

直播码流不能播放 #70

psnow opened this issue Aug 25, 2014 · 10 comments

Comments

@psnow
Copy link

psnow commented Aug 25, 2014

测试了一个直播码流,发现播放10秒钟不到,就画面静止再也不能播放了。log如下:
08-25 14:34:36.921: E/IJKMEDIA(6277): buf pos=3699, %56
08-25 14:34:36.927: E/IJKMEDIA(6277): buf pos=3855, %59
08-25 14:34:36.931: E/IJKMEDIA(6277): buf pos=4010, %62
08-25 14:34:36.940: E/IJKMEDIA(6277): buf pos=4132, %65
08-25 14:34:37.204: E/IJKMEDIA(6277): buf pos=4574, %68
08-25 14:34:37.209: E/IJKMEDIA(6277): buf pos=4729, %71
08-25 14:34:37.216: E/IJKMEDIA(6277): buf pos=4886, %74
08-25 14:34:37.222: E/IJKMEDIA(6277): buf pos=5016, %77
08-25 14:34:37.476: E/IJKMEDIA(6277): buf pos=5440, %80
08-25 14:34:37.483: E/IJKMEDIA(6277): buf pos=5597, %83
08-25 14:34:37.498: E/IJKMEDIA(6277): buf pos=5749, %86
08-25 14:34:37.758: E/IJKMEDIA(6277): buf pos=6168, %89
08-25 14:34:38.028: E/IJKMEDIA(6277): buf pos=6593, %92
08-25 14:34:38.030: E/IJKMEDIA(6277): buf pos=6745, %95
08-25 14:34:38.290: E/IJKMEDIA(6277): buf pos=7132, %98
08-25 14:34:43.397: W/IJKMEDIA(6277): PES packet size mismatch
08-25 14:34:55.695: W/IJKMEDIA(6277): Cannot use next picture in error concealment
08-25 14:34:55.696: I/IJKMEDIA(6277): concealing 1507 DC, 1507 AC, 1507 MV errors in P frame
08-25 14:34:55.749: E/IJKMEDIA(6277): Input buffer exhausted before END element found
08-25 14:34:56.243: E/IJKMEDIA(6277): ffp_toggle_buffering: completed: (error=0)
08-25 14:34:56.244: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_COMPLETED
08-25 14:34:56.244: W/IJKMEDIA(6277): FFP_MSG_COMPLETED:
08-25 14:34:56.244: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:34:56.244: W/IJKMEDIA(6277): IjkMediaPlayer_seekTo
08-25 14:34:56.244: W/IJKMEDIA(6277): ijkmp_seek_to(0)
08-25 14:34:56.246: W/IJKMEDIA(6277): ijkmp_seek_to(0)=0
08-25 14:34:56.246: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK
08-25 14:34:56.246: W/IJKMEDIA(6277): IjkMediaPlayer_start
08-25 14:34:56.246: E/IJKMEDIA(6277): stream_seek 64159822(0) + 64159822,
08-25 14:34:56.247: W/IJKMEDIA(6277): ijkmp_start()
08-25 14:34:56.247: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK: seek to 0
08-25 14:34:56.247: W/IJKMEDIA(6277): ijkmp_start()=0
08-25 14:34:56.247: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START
08-25 14:34:56.247: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START: restart from seek pos
08-25 14:34:56.248: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:34:56.316: D/IJKMEDIA(6277): ffp_toggle_buffering_l: start
08-25 14:34:56.317: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_START:
08-25 14:34:56.428: E/IJKMEDIA(6277): http://m.wasu.cn:80/templates/freewap/runtime/wasuClient/common/Play.jsp?u=RDUCHS-NB3G-IPS-03140894837631822&aId=6609317&cType=1&mType=IPHONE&aType=38: error while seeking
08-25 14:34:56.428: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_SEEK_COMPLETE
08-25 14:34:56.428: W/IJKMEDIA(6277): FFP_MSG_SEEK_COMPLETE:
08-25 14:34:56.490: D/IJKMEDIA(6277): ffp_toggle_buffering_l: end
08-25 14:34:56.491: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_END:
08-25 14:34:57.491: E/IJKMEDIA(6277): ffp_toggle_buffering: completed: (error=0)
08-25 14:34:57.491: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_COMPLETED
08-25 14:34:57.491: W/IJKMEDIA(6277): FFP_MSG_COMPLETED:
08-25 14:34:57.492: W/IJKMEDIA(6277): IjkMediaPlayer_seekTo
08-25 14:34:57.492: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:34:57.493: W/IJKMEDIA(6277): ijkmp_seek_to(0)
08-25 14:34:57.493: W/IJKMEDIA(6277): ijkmp_seek_to(0)=0
08-25 14:34:57.493: W/IJKMEDIA(6277): IjkMediaPlayer_start
08-25 14:34:57.493: W/IJKMEDIA(6277): ijkmp_start()
08-25 14:34:57.494: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK
08-25 14:34:57.494: E/IJKMEDIA(6277): stream_seek 64159822(0) + 64159822,
08-25 14:34:57.494: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK: seek to 0
08-25 14:34:57.494: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START
08-25 14:34:57.494: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START: restart from seek pos
08-25 14:34:57.494: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:34:57.495: W/IJKMEDIA(6277): ijkmp_start()=0
08-25 14:34:57.549: D/IJKMEDIA(6277): ffp_toggle_buffering_l: start
08-25 14:34:57.549: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_START:
08-25 14:34:57.648: E/IJKMEDIA(6277): http://m.wasu.cn:80/templates/freewap/runtime/wasuClient/common/Play.jsp?u=RDUCHS-NB3G-IPS-03140894837631822&aId=6609317&cType=1&mType=IPHONE&aType=38: error while seeking
08-25 14:34:57.648: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_SEEK_COMPLETE
08-25 14:34:57.648: W/IJKMEDIA(6277): FFP_MSG_SEEK_COMPLETE:
08-25 14:34:57.723: D/IJKMEDIA(6277): ffp_toggle_buffering_l: end
08-25 14:34:57.723: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_END:
08-25 14:34:58.723: E/IJKMEDIA(6277): ffp_toggle_buffering: completed: (error=0)
08-25 14:34:58.724: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_COMPLETED
08-25 14:34:58.725: W/IJKMEDIA(6277): FFP_MSG_COMPLETED:
08-25 14:34:58.727: W/IJKMEDIA(6277): IjkMediaPlayer_seekTo
08-25 14:34:58.727: W/IJKMEDIA(6277): ijkmp_seek_to(0)
08-25 14:34:58.728: W/IJKMEDIA(6277): ijkmp_seek_to(0)=0
08-25 14:34:58.728: W/IJKMEDIA(6277): IjkMediaPlayer_start
08-25 14:34:58.728: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:34:58.729: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK
08-25 14:34:58.729: W/IJKMEDIA(6277): ijkmp_start()
08-25 14:34:58.730: E/IJKMEDIA(6277): stream_seek 64159822(0) + 64159822,
08-25 14:34:58.730: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK: seek to 0
08-25 14:34:58.730: W/IJKMEDIA(6277): ijkmp_start()=0
08-25 14:34:58.731: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START
08-25 14:34:58.732: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START: restart from seek pos
08-25 14:34:58.733: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:34:58.796: D/IJKMEDIA(6277): ffp_toggle_buffering_l: start
08-25 14:34:58.796: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_START:
08-25 14:34:58.926: E/IJKMEDIA(6277): http://m.wasu.cn:80/templates/freewap/runtime/wasuClient/common/Play.jsp?u=RDUCHS-NB3G-IPS-03140894837631822&aId=6609317&cType=1&mType=IPHONE&aType=38: error while seeking
08-25 14:34:58.927: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_SEEK_COMPLETE
08-25 14:34:58.927: W/IJKMEDIA(6277): FFP_MSG_SEEK_COMPLETE:
08-25 14:34:58.996: D/IJKMEDIA(6277): ffp_toggle_buffering_l: end
08-25 14:34:58.996: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_END:
08-25 14:34:59.996: E/IJKMEDIA(6277): ffp_toggle_buffering: completed: (error=0)
08-25 14:34:59.997: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_COMPLETED
08-25 14:34:59.998: W/IJKMEDIA(6277): FFP_MSG_COMPLETED:
08-25 14:34:59.998: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:34:59.999: W/IJKMEDIA(6277): IjkMediaPlayer_seekTo
08-25 14:34:59.999: W/IJKMEDIA(6277): ijkmp_seek_to(0)
08-25 14:35:00.001: W/IJKMEDIA(6277): ijkmp_seek_to(0)=0
08-25 14:35:00.002: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK
08-25 14:35:00.002: W/IJKMEDIA(6277): IjkMediaPlayer_start
08-25 14:35:00.002: E/IJKMEDIA(6277): stream_seek 64159822(0) + 64159822,
08-25 14:35:00.003: W/IJKMEDIA(6277): ijkmp_start()
08-25 14:35:00.003: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK: seek to 0
08-25 14:35:00.003: W/IJKMEDIA(6277): ijkmp_start()=0
08-25 14:35:00.004: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START
08-25 14:35:00.005: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START: restart from seek pos
08-25 14:35:00.009: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:35:00.174: D/IJKMEDIA(6277): ffp_toggle_buffering_l: start
08-25 14:35:00.175: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_START:
08-25 14:35:00.365: E/IJKMEDIA(6277): http://m.wasu.cn:80/templates/freewap/runtime/wasuClient/common/Play.jsp?u=RDUCHS-NB3G-IPS-03140894837631822&aId=6609317&cType=1&mType=IPHONE&aType=38: error while seeking
08-25 14:35:00.368: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_SEEK_COMPLETE
08-25 14:35:00.369: W/IJKMEDIA(6277): FFP_MSG_SEEK_COMPLETE:
08-25 14:35:00.437: D/IJKMEDIA(6277): ffp_toggle_buffering_l: end
08-25 14:35:00.437: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_END:
08-25 14:35:01.437: E/IJKMEDIA(6277): ffp_toggle_buffering: completed: (error=0)
08-25 14:35:01.438: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_COMPLETED
08-25 14:35:01.438: W/IJKMEDIA(6277): FFP_MSG_COMPLETED:
08-25 14:35:01.439: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:35:01.439: W/IJKMEDIA(6277): IjkMediaPlayer_seekTo
08-25 14:35:01.439: W/IJKMEDIA(6277): ijkmp_seek_to(0)
08-25 14:35:01.439: W/IJKMEDIA(6277): ijkmp_seek_to(0)=0
08-25 14:35:01.441: W/IJKMEDIA(6277): IjkMediaPlayer_start
08-25 14:35:01.441: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK
08-25 14:35:01.442: W/IJKMEDIA(6277): ijkmp_start()
08-25 14:35:01.442: E/IJKMEDIA(6277): stream_seek 64159822(0) + 64159822,
08-25 14:35:01.443: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_SEEK: seek to 0
08-25 14:35:01.445: W/IJKMEDIA(6277): ijkmp_start()=0
08-25 14:35:01.445: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START
08-25 14:35:01.447: D/IJKMEDIA(6277): ijkmp_get_msg: FFP_REQ_START: restart from seek pos
08-25 14:35:01.448: E/IJKMEDIA(6277): unknown FFP_MSG_xxx(700)
08-25 14:35:01.513: D/IJKMEDIA(6277): ffp_toggle_buffering_l: start
08-25 14:35:01.514: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_START:
08-25 14:35:01.628: E/IJKMEDIA(6277): http://m.wasu.cn:80/templates/freewap/runtime/wasuClient/common/Play.jsp?u=RDUCHS-NB3G-IPS-03140894837631822&aId=6609317&cType=1&mType=IPHONE&aType=38: error while seeking
08-25 14:35:01.628: W/IJKMEDIA(6277): ijkmp_get_msg: FFP_MSG_SEEK_COMPLETE
08-25 14:35:01.629: W/IJKMEDIA(6277): FFP_MSG_SEEK_COMPLETE:
08-25 14:35:01.728: D/IJKMEDIA(6277): ffp_toggle_buffering_l: end
08-25 14:35:01.728: W/IJKMEDIA(6277): FFP_MSG_BUFFERING_END:

请指教如何解决!

@psnow
Copy link
Author

psnow commented Aug 27, 2014

使用stable-n010版本,去掉do-while(0),增加以下代码
if (is->audioq.size > 50 &&
is->videoq.size >5) {
ffp_toggle_buffering(ffp, 0);
}
PS:这个值是否是合适的?

目前可以播放,但是播放期间会经常停顿一下,不算流畅(大概5~10秒停顿1~2秒,网络环境还算不错)。后续是否会考虑增加缓存播放呢,来处理直播流卡顿的问题。
谢谢!

@bbcallen
Copy link
Contributor

直播流后面会考虑优化,现在没怎么接触过,所以我也没什么经验。

@psnow
Copy link
Author

psnow commented Sep 3, 2014

最近还在查看这个问题,发现在读数据的时候会进入这个条件:
if ((!is->paused || completed) &&
(!is->audio_st || is->audio_finished == is->audioq.serial) &&
(!is->video_st || (is->video_finished == is->videoq.serial && is->pictq_size == 0)))
然后会做seek的动作,在直播流中一做seek就挂住了。
去掉ffp_notify_msg1(ffp, FFP_MSG_COMPLETED);不做seek动作,可是在av_read_frame的返回却一直是AVERROR_EOF,无法恢复了。

现在想请教两个问题,来帮助理清思路找出解决方法。
1.if ((!is->paused || completed) &&
(!is->audio_st || is->audio_finished == is->audioq.serial) &&
(!is->video_st || (is->video_finished == is->videoq.serial && is->pictq_size == 0)))这个条件是判断什么的?当finished==serial时说明了什么?

2.ffp_check_buffering_l是一个什么策略?

谢谢。期待你的解答。

@psnow
Copy link
Author

psnow commented Sep 3, 2014

问题1:是说明队列中没有数据了。

av_read_frame读取又一直是失败状态,所以无法恢复了。

那么是说明导致av_read_frame一直读取失败呢?网络是正常的,每次播放5秒左右就出现问题。重新打开又是只能播放5秒。
所以现在表面问题可以定位在是什么导致av_read_frame读取失败并且不能恢复。

@chodison
Copy link
Contributor

chodison commented Sep 3, 2014

能提供下你的码流吗?

@chodison
Copy link
Contributor

chodison commented Sep 5, 2014

这个码流无法访问

@psnow
Copy link
Author

psnow commented Sep 6, 2014

这个有时效性,每次能有效一周。我debug发现和ffmpeg的源码有关,对hls的解析和重定向可能存在bug。我继续跟踪中。

@bbcallen
Copy link
Contributor

发生seek以前就已经遇到错误了。

  1. 请把刚连上时,输出的视频编码信息贴出来,
  2. 请把m3u8的文本内容wget下来,贴在这里
  3. 如果是嵌套的m3u8,麻烦嵌套的m3u8文本也贴出来。

@psnow
Copy link
Author

psnow commented Sep 18, 2014

是ffmpeg版本的问题,建议升级到最新版本,问题解决。

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

3 participants