对rtmpdump进行了封装、优化。
1. 使用说明请参考雷神文章 http://blog.youkuaiyun.com/leixiaohua1020/article/details/14229047
2. 遇到的问题
在ios移植中首先遇到的问题就是PIPE异常奔溃,添加 signal(SIGPIPE, SIG_IGN); 后还是不行,安卓是可以了。
后又在ios时修改为
int on = 1;
setsockopt(r->m_sb.sb_socket, SOL_SOCKET, SO_NOSIGPIPE, &on, sizeof(on));
这时就可以了。
第二个问题 RTMP_GetNextMediaPacket 获取到的视频包会导致视频解码器奔溃,最后查出是包体有误,长度有时会是小于5个字节的数据。始终没查出这是怎么出来的这种包,最后做了安全检查
int RtmpConnection::handle_input()
{
RTMPPacket packet = { 0 };
int read = RTMP_GetNextMediaPacket(_rtmp, &packet);
if (read <= 0 || read == 2){
return -1;
}
uint8_t *packetBody = (uint8_t *)packet.m_body;
unsigned int nPacketLen = packet.m_nBodySize;
if (_callback && _running)

本文介绍了rtmpdump的封装与优化过程,包括在iOS移植中遇到的PIPE异常和视频包解码错误的问题,以及如何通过设置SO_NOSIGPIPE选项解决崩溃。同时,对rtmpdump进行了扩展,添加了receiveAudio和receiveVideo命令,允许用户自定义接收音视频的需求。提供源码链接供参考。
最低0.47元/天 解锁文章
1917

被折叠的 条评论
为什么被折叠?



