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

   日期:2022-02-23     文章发布:文章发布    网络转载:生活号    
核心提示:对应RTMP推流,业界有很多开源方案。如使用FFMPEG推流,librtmp(rtmp-dump),gstream推流。由于ffmpeg和gstreamer比较庞大,仅仅用来推流,有大炮打蚊子之嫌。针对客户端特别是瘦客户端,使用librtmp(rtmp-dump)方案更加精简,更加高效。 本方案基本思路: RTMP视频推流流程 1.下载并编译librtmp。 下载地址:http://rtmpdum...
移动站源标题:http://mip.818114.com/news/item-176671.html

对应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,该类定义如下:

 1class Wrapper_RtmpLib
 2
 3{
 4
 5public:
 6
 7       Wrapper_RtmpLib(char * url);
 8
 9       ~Wrapper_RtmpLib();
10
11      int Open();
12
13      int SendData(char * data,int dataLength, unsigned int timeStamp,int debug = -1);
14
15      int IsConnect();
16
17      int Close();
18
19private:
20
21     int InitSockets();
22
23     void CleanupSockets();
24
25     int pushSPSPPS(char *sps, int spsLen, char *pps, int ppsLen, int m_stream_id,unsigned int timeStamp);
26
27     int pushVideoData(char *data, int dataLen, bool keyFrame, int m_stream_id,unsigned int timeStamp);
28
29     int GetStartPrixLen(char *Pack, int offest);
30
31     char * rtmpUrl = NULL;
32
33     RTMP * m_pRtmp = NULL;
34
35     NALU * CopyNALU(NALU * src);
36
37     void FreeNALU(NALU * nalu);
38
39};

3. Wrapper_RtmpLib对外提供RTMP推流接口。

基本使用步骤:

1. 定义一个Wrapper_RtmpLib对象test

2. 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端播放效果

免责声明:本网部分文章和信息来源于互联网,本网转载出于传递更多信息和学习之目的,并不意味着赞同其观点或证实其内容的真实性,如有侵权请通知我们删除!(留言删除
 
 
更多>同类行业

同类新闻
最新资讯
最新发布
最受欢迎
网站首页  |  黄页  |  联系方式  |  信息  |  版权隐私  |  网站地图  |  API推送  |  网站留言  |  RSS订阅  |  违规举报  |  京ICP备2000095号