因为要在嵌入式端使用rtmp推流,目前我知道的有三种办法,ffmpeg、gstreamer、librtmp,每一种都需要移植到嵌入式平台,还是从我最熟悉的gstreamer开始验证吧。
现在我的嵌入式平台gstreamer库没有rtmp元件,因此只能先在Ubuntu16.04系统的PC上测试,然后再移植带有rtmp元件的gstreamer库。
Ubuntu16.04系统已经自带了gstreamer-1.0的库,并且已经包含rtmp元件,不用移植可以直接测试了。
注意:我使用的USB摄像头可以直接输出H264帧,因此不需要使用编码元件。
gstreamer命令行实现rtmp推流
首先用命令行工具测试:
gst-launch-1.0 -v v4l2src device=/dev/video0 ! 'video/x-h264, width=1280, height=720, framerate=30/1' ! queue ! h264parse ! flvmux ! rtmpsink location='rtmp://192.168.1.102/live'
这个命令行执行后,就可以在192.168.1.102地址的PC上打开流媒体服务端观看。可以使用nginx或者srs流媒体服务端,创建一个html文件打开网页观看。
<h1>01</h1>
<object width='640' height='377' id='SampleMediaPlayback' name='SampleMediaPlayback' type='application/x-shockwave-flash' classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' >
<param name='movie' value='swfs/SampleMediaPlayback.swf' />
<param name='quality' value='high' />
<param name='bgcolor' value='#000000' />
<param name='allowfullscreen' value='true' />
<embed src='SampleMediaPlayback.swf' width='640' height='377' id='SampleMediaPlayback' quality='high' bgcolor='#000000' name='SampleMediaPlayback' allowfullscreen='true' pluginspage='http://www.adobe.com/go/getflashplayer' flashvars='&src=rtmp://192.168.1.102:1935/live&autoHideControlBar=true&streamType=live&autoPlay=true&verbose=true' type='application/x-shockwave-flash'>
</embed>
</object>
gstreamer代码实现rtmp推流
#include <string.h>
#include <gst/gst.h>