rtmp播放器解析接口_视频RTMP推流实践

rtmp播放器解析接口_视频RTMP推流实践,第1张

rtmp播放器解析接口_视频RTMP推流实践 对应RTMP推流,业界有很多开源方案。

如使用FFMPEG推流,librtmp(rtmp-dump),gstream推流。

由于ffmpeg和gstreamer比较庞大,仅仅用来推流,有大炮打蚊子之嫌。

针对客户端特别是瘦客户端,使用librtmp(rtmp-dump)方案更加精简,更加高效。

本方案基本思路:RTMP视频推流流程1. 下载并编译librtmp。

下载地址:http://rtmpdump.mplayerhq.hu/download/编译后产生一个librtmp.so 库2. 调用librtmp,封装一个视频层Wrapper_RtmpLib.cpp,该类定义如下: 1classWrapper_RtmpLib 2 3{ 4 5public: 6 7Wrapper_RtmpLib(char*url); 8 9~Wrapper_RtmpLib();1011intOpen();1213intSendData(char*data,intdataLength,unsignedinttimeStamp,intdebug=-1);1415intIsConnect();1617intClose();1819private:2021intInitSockets();2223voidCleanupSockets();2425intpushSPSPPS(char*sps,intspsLen,char*pps,intppsLen,intm_stream_id,unsignedinttimeStamp);2627intpushVideoData(char*data,intdataLen,boolkeyFrame,intm_stream_id,unsignedinttimeStamp);2829intGetStartPrixLen(char*Pack,intoffest);3031char*rtmpUrl=NULL;3233RTMP*m_pRtmp=NULL;3435NALU*CopyNALU(NALU*src);3637voidFreeNALU(NALU*nalu);3839};3. Wrapper_RtmpLib对外提供RTMP推流接口

基本使用步骤:1. 定义一个Wrapper_RtmpLib对象test2. Test.open(),与服务器建立rtmp信令相关连接3. int SendData(char * data,int dataLength, unsigned int timeStamp,int debug = -1);发送RTMP数据注意data,必须是一个完整的NAL单元。

所以应用程序调该接口前必须解析出NAL单元。

下面是一个h264裸文件推送RTMP过程。

基本思路如下:读文件—-解析NAL单元—利用 SendData发送一个完成的NAL单元完成推流编译main.cpp Wrapper_RtmpLib.cpp 并链接librtmp.so生成可执行文件h2642rtmp.编译生成可执行文件运行可执行程序推流./h264tortmp avc.h264 rtmp://192.168.1.226:8085/live/1830562240700540100 25使用该方案注意:1. SendData 必须是一个完整的NAL单元。

如果是文件需要解析或网络流必须解析出NAL单元2. 时间戳采用间隔时间。

即时间戳按每帧时间间隔递增,可能因为网络抖动或者1000/帧率不是帧率会存在累计误差。

该demo因为不存在音视频同步,时间戳影响不大。

3.如果是云主机,在云主机内不能推公网IP,而要推内网IP 192.168.1.226,客户端访问需要外网IP。

客户端播放效果如下:RTMP流web端播放效果

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/646353.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-17
下一篇 2022-04-17

发表评论

登录后才能评论

评论列表(0条)

保存