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

协议解析错误 #3519

Closed
baikimi opened this issue Mar 4, 2022 · 25 comments
Closed

协议解析错误 #3519

baikimi opened this issue Mar 4, 2022 · 25 comments

Comments

@baikimi
Copy link

baikimi commented Mar 4, 2022

问题描述:

APP通过wifi从摄像头(我司称布控球)拉取rtsp视频流,出现视频播放不连续,时间2秒3秒等作为间隔播放(叫跳帧?)同事认为是协议解析错误,说视频不需要解码,视频播放越久出现概率越大。可能是因为wifi不稳定导致,但是WiFi不可控,希望能实现出现协议解析错误时底层能处理,或者提供接口检测APP重新拉流。部分日志:

##出现问题的视频流:因为是我司内部摄像头:暂没想到如何提供视频流

问题机型/系统:测试用多部机器均出现小米A2、华为手机、华为平板

GSY依赖版本

implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-java:v8.1.7-release-jitpack'

implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-exo2:v8.1.7-release-jitpack'


implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-ex_so:v8.1.7-release-jitpack'

Demo中的复现步骤

播放久大概率出现
问题代码:(如果有)

问题log(如果有)

2021-12-22 17:07:19.547 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq f595 expected=82e3
2021-12-22 17:07:19.633 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq 82e4 expected=f597
2021-12-22 17:07:19.787 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq f598 expected=82e6
2021-12-22 17:07:19.894 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq 82e7 expected=f59a
2021-12-22 17:07:20.024 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq f59b expected=82e9
2021-12-22 17:07:20.104 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq 82ea expected=f59d
2021-12-22 17:07:20.264 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq f59e expected=82ec
2021-12-22 17:07:20.349 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq 82ed expected=f5a0
2021-12-22 17:07:20.545 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq f5a1 expected=82ef
2021-12-22 17:07:20.625 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq 82f0 expected=f5a6
2021-12-22 17:07:20.709 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq f5a6 expected=82f4
2021-12-22 17:07:20.710 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq 82f4 expected=f5ab
2021-12-22 17:07:20.789 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq f5ab expected=82f9
2021-12-22 17:07:20.792 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq 82f9 expected=f5b1
2021-12-22 17:07:20.881 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq f5b1 expected=82ff
2021-12-22 17:07:20.883 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq 82ff expected=f5ba
2021-12-22 17:07:20.945 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq f5ba expected=8308
2021-12-22 17:07:20.971 19805-20058/com.benliu.ptv3 E/IJKMEDIA: RTP: PT=60: bad cseq 8308 expected=f5f0

@CarGuo
Copy link
Owner

CarGuo commented Mar 4, 2022

新版本的建议切换到 PlayerFactory.setPlayManager(Exo2PlayerManager.class); 试试,另外我觉的你同事说的不对

@baikimi
Copy link
Author

baikimi commented Mar 4, 2022

com.google.android.exoplayer2.ExoPlaybackException: Source error
Caused by: com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: java.net.MalformedURLException: unknown protocol: rtsp
Caused by: java.net.MalformedURLException: unknown protocol: rtsp
com.google.android.exoplayer2.ExoPlaybackException: Source error
Caused by: com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: java.net.MalformedURLException: unknown protocol: rtsp
Caused by: java.net.MalformedURLException: unknown protocol: rtsp

加上后完全播放不了

@CarGuo
Copy link
Owner

CarGuo commented Mar 4, 2022

要最新版本

@baikimi
Copy link
Author

baikimi commented Mar 4, 2022

implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-java:v8.1.9-release-jitpack'

//是否需要ExoPlayer模式
implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-exo2:v8.1.9-release-jitpack'

//更多ijk的编码支持
implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-ex_so:v8.1.9-release-jitpack'

替换到这个版本后,报如下错误:
com.google.android.exoplayer2.ExoPlaybackException: Source error
Caused by: java.io.IOException: com.google.android.exoplayer2.ParserException
Caused by: com.google.android.exoplayer2.source.rtsp.RtspMediaSource$RtspPlaybackException: com.google.android.exoplayer2

Caused by: com.google.android.exoplayer2.ParserException

com.google.android.exoplayer2.ExoPlaybackException: Source error
Caused by: com.google.android.exoplayer2.ParserException
Caused by: java.lang.IllegalStateException: One of more mandatory SDP fields are not set.

@CarGuo
Copy link
Owner

CarGuo commented Mar 4, 2022

因为你的流有问题,不符合默认规定的标准····· One of more mandatory SDP fields are not set ,说明 SDP 协议内容不全

@baikimi
Copy link
Author

baikimi commented Mar 4, 2022

麻烦问一下,之前频繁初始化播放、销毁操作会出现播放不成功的问题,是应为销毁资源需要一定时间吗?后来我在销毁和初始化播放之间加了个判断有没有间隔10秒,这样好很多。
还有刚才播放看到日志:
Invalid UE golomb code
cbp too large (3199971767) at 33 45
error while decoding MB 33 45
这个说明了什么问题。
另外 对于解决上面的问题有什么的建议

@CarGuo
Copy link
Owner

CarGuo commented Mar 4, 2022

频繁初始化播放、销毁操作对于 ijk 层面确实会有一个异步问题,因为 ijk 的释放是异步的,所以过于频繁会有性能上的开销

@baikimi
Copy link
Author

baikimi commented Mar 7, 2022

由于网络不稳定,导致播放中断,参考 #2757 实现了重连功能,重连就是监听到中断重新初始化播放器,但有时不一定成功,后来重连改为销毁播放器,睡眠10秒,再初始化播放器,来避免销毁的异步问题。想问由于网络不稳定等因素导致的播放中断更好的重连方案?或者我现在用的重连方案哪里可以优化的?

@CarGuo
Copy link
Owner

CarGuo commented Mar 7, 2022

基本上都是要重新创建一个网络链接来解决,区别在于是底层做(ffmpeg)还是在上层做,这就考虑成本问题,要体验好你肯定是需要在底层改,要简单肯定就是上层重新构建 player 更方便。

所以你如果是用默认 ijk 模式,就可以自己定制 so 来解决,如果是用 exo ,那就只能从上层去解决

@baikimi
Copy link
Author

baikimi commented Mar 7, 2022

怎么确定我是ijk还是exo模式?之前尝试过自己生成so, 但是出现的问题太多了,所以就直接用你们的库了,你们能不能在你们库的基础上自定义so来解决重连的问题呀

@CarGuo
Copy link
Owner

CarGuo commented Mar 7, 2022

没有调用 PlayerFactory.setPlayManager(Exo2PlayerManager.class); 的就是默认的 IjkPlayerManager

@baikimi
Copy link
Author

baikimi commented Mar 7, 2022

解决下重连问题呀,这个问题很常见的

@CarGuo
Copy link
Owner

CarGuo commented Mar 7, 2022

没感觉到什么问题,我这边很正常

@baikimi
Copy link
Author

baikimi commented Mar 8, 2022

通过onSurfaceUpdatedStop这个方法监听到播放中断后,重连可不可以用player.getCurrentPlayer. startPlayLogic实现?如果可以再次基础上多次通过“player.getCurrentPlayer. startPlayLogic”还是频繁中断,就再根据一定次数加上销毁播放器、睡眠、重新初始化播放器来优化?

Repository owner deleted a comment from Mellowang001 Mar 8, 2022
@baikimi
Copy link
Author

baikimi commented Mar 8, 2022

是不是设置了静音“ GSYVideoManager.instance().setNeedMute(true);

@CarGuo
Copy link
Owner

CarGuo commented Mar 8, 2022

不是很理解你的场景,频繁中断这个你从播放器段考虑没用,你应该从根源解决问题

@baikimi
Copy link
Author

baikimi commented Mar 8, 2022

播放着突然变终止变成只有播放按钮的回调接口有没有?或者怎么监听?

@baikimi
Copy link
Author

baikimi commented Mar 8, 2022

E/IJKMEDIA: Connection to tcp://192.168.1.168:554?timeout=0 failed: No route to host
E/IJKMEDIA: rtsp://192.168.1.168/main: No route to host

danmaku.ijk.media.player.IjkMediaPlayer: Error (-10000,0)

突然报这个错误然后播放失败,怎么解决,加上这个配置可以解决吗“ VideoOptionModel videoOptionModel24 = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_timeout", -1);

@CarGuo
Copy link
Owner

CarGuo commented Mar 8, 2022

No route to host 的意思是无法访问目标服务器的意思,我觉得你纠结的都是点都好奇怪

@baikimi
Copy link
Author

baikimi commented Mar 8, 2022

我通过“onSurfaceUpdated”方法查询,想实现重连操作。但是现在出现一种意外,视频播放器突然变为“播放按钮”,“onSurfaceUpdated”不会执行,看到“setStateAndUi”的数字数据是数字6,想问6代表的是什么,然后怎么解决这种情况的中断,实现重连操作?

@CarGuo
Copy link
Owner

CarGuo commented Mar 8, 2022

我越来越不知道你的点在哪里了?

@baikimi
Copy link
Author

baikimi commented Mar 9, 2022

我上面已经描述很详细了,如果哪里看不懂麻烦提出来

@CarGuo
Copy link
Owner

CarGuo commented Mar 9, 2022

就是不明吧你上面说的是什么,也不知道你想做什么?如果你想要断网重连就自己在 error 或者 complete 里去做,如果是一直断那就是你网络和流有问题,网络和流不稳定你在客户端做啥都没有,所以我不知道你究竟想干啥。
如果你觉得 不满足你的场景,就自己自定义,代码不都是开源的么 ····

@baikimi
Copy link
Author

baikimi commented Mar 9, 2022

就是解决“网络和流的问题”然后实现重新连接,但是“网络和流有问题”在error或者complete有时实现不了

@BirdBlue2
Copy link

看完这个 issue 感觉完全是在牛头不对马嘴? 不就是 onError 的时候自己 setup 然后 play 就好了吗?
之前我们也有类似问题,后来发现是后端流有问题,不稳定导致,App 端一直重连不行的, 要找到问题源头,在数据源层面解决,不走 error或者complete 说明你的流不是标准协议。

@CarGuo CarGuo closed this as completed Mar 17, 2022
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