适用于Raspberry Pi的RTMP直播推流器

很早前入了个Raspberry Pi 1代和一个摄像头模组,准备做直播推流设备.

尝试过第一个方案:
raspivid+ffmpeg串流rtmp直播,效果不太好.
ffmpeg对输入流分析太费时,影响直播的时效性.

第二个方案:
后来ffmpeg-3.1好像,更新了OMX实现的H.264编码器,Raspberry Pi通过插入bcm2835-v4l2内核模块,映射出/dev/video0设备,ffmpeg再使用V4L2接口直接进行取摄像头并硬件编码推流.
720分辨率也能行,30帧没有问题,CPU也占用很少,但缺点是分辨率增大后(1080),v4l2取摄像头数据的帧率实在太低,只有6帧左右.
并且不能像raspivid那样方便的设置摄像头参数,比如水平\垂直翻转,角度旋转,亮度,ISO,白平衡这些.
这个方案也被pass.

第三个方案:
参照raspivid,使用OpenMAX IL接口进行摄像头数据捕获->硬件编码->rtmp传输.这个需要进行一点编程开发,由于后来做NodeMediaClient项目,一直耽搁了.

最近有空,完成了第三个方案的开发.可以直接使用该程序推流到远端服务器,如阿里云,星域CDN这类上传免费的云服务.
不过由于Raspberry Pi没有板载麦克风,需要外接一个USB声卡,最近身边没找到,就没做音频采集编码这部分.
一代的cpu性能比较低,又没有NEON指令集,编码AAC应该还比较费CPU.2/3代的就应该没有问题.

另外还可以配合Nginx-Rtmp使用, exec_static调用该程序推流到本地,再配上一个html+flash播放器,就可以像普通监控摄像头一样进行web浏览,但又不需要额外安装视频控件,也不需要安装vlc播放器,也不限浏览器,不限操作系统,只需要有flash插件就行,这个很好满足.
或者直接用srs,输出http-flv,再用flv.js实现HTML5播放,flash插件的限制也省了.
想想还是不错的.当然还可以同时再push到远端服务器,录制到本地.
玩法很多,欢迎讨论.

下载:raspipublisher-v0.1.1
目前暂时对1080分辨率采集还有点问题,下个版本修复.
运行于raspbian jessie.
pi1下 720@30fps,cpu 8%左右.1080@30fps,cpu 27%左右
pi2,pi3还没测试,应该可以.
glib版本差异可能在ArchLinuxArm上有问题.
简单用法:
raspipublisher -t 0 -g 30 -vf -hf -o rtmp://192.168.0.10/live/s
-t 0 永久发布
-g 30, 关键帧间隔30帧一个,便于直播秒开
-vf 垂直翻转
-hf 水平翻转
另外还有 -w -h -b这些参数,和raspivid一样

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 适用于Raspberry Pi的RTMP直播推流器

4 评论

  1. 期待更新git地址,方便持续跟踪,如果有付费版本,也非常愿意支付!晚上回去试试

  2. 博主您好,请问raspipublisher-v0.1.1这个包的实现原理是什么样的呢?能否指教一下,我使用树莓派zero W使用ffmepg 推流,延迟非常厉害,2秒以上,稍微推一会儿,延迟会累加,能延迟10秒以上,但是我使用了您的这个包之后,延迟就不再是问题了,只有200-300毫秒,可以说是秒开,我向请教一些博主,实现原理是什么样的,万分谢谢!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据