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

RtmpPlayer多次收到error,异常退出 #22

Closed
oujiangping opened this issue Apr 20, 2019 · 4 comments
Closed

RtmpPlayer多次收到error,异常退出 #22

oujiangping opened this issue Apr 20, 2019 · 4 comments
Labels

Comments

@oujiangping
Copy link

void RtmpPlayer::onPlayResult_l(const SockException &ex) {
这个函数在网络差的情况下连续被调用收到ex时候:
broken pipe,多次打印后异常fault退出,看了一下应该是多次调用shutdown或者teardown导致的

@xia-chu
Copy link
Member

xia-chu commented Apr 22, 2019

有没有更详细的错误日志截图?

@DroidChow
Copy link
Contributor

复现步骤:成功播放流后断开网络。
原因是在socket异常出错后TcpClient会调用onErr处理异常,而由TcpClient:onSockErr可以看出,出错回调是在重置sock之前进行的,如此可能会造成循环。

void TcpClient::onSockErr(const SockException& ex) {
	onErr(ex);
	TcpClient::shutdown();	
}

例如socket异常后,{Rtsp/RTMP}Player回调teardown接口,terardown函数调用TcpClient::alive来判断socket是否存活,而sock重置之前alive返回恒为true。我临时将onErr置后可以暂时解决问题,但没有测试对其它地方的影响

void TcpClient::onSockErr(const SockException& ex) {
	TcpClient::shutdown();	
	onErr(ex);// 置后
}

@oujiangping
Copy link
Author

@xiongziliang
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe
test_server(168) /soft/ZLMediaKit/src/Rtsp/RtspPlayer.cpp 581
2019-04-25 05:13:19.864 W | onPlayResult_l 5 broken pipe

这个报错在580行左右,代码由于我加过log所以行数不是特别精准了

@xia-chu
Copy link
Member

xia-chu commented Apr 25, 2019

你好 这个bug我已经通过更新ZLToolKit解决
这个问题导致的原因是,在Socket onErr事件触发时,RtspPlayer对象会发送teardown指令给服务器,但是这个时候socket是不可写的 导致又触发了onErr事件。

我通过在onErr事件触发前closeSocket,这样发送数据时就不会再触发onErr事件事件了

我已经通过修改代码的方式重现了 broken pipe这种情况,新代码不在会有这个bug了

谢谢对本项目的支持!

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

No branches or pull requests

3 participants