58955|41

1403

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

一起玩树莓派3 + 重磅:H.264硬编码推流实现完整直播功能 [复制链接]

 
好了,进入本系列测评的尾声了,直播系统测试已经完成,也有网友已经体验过了,拖延症帖子也该发了

先简单介绍一下整个系统的组成:
1.树莓派采集摄像头视频 ->2.硬编码成flv格式 ->3.通过rtmp推流到本机nginx-rtmp服务器 ->4.播放器播放直播视频

其实绝大部分功能我们在前面的篇帖中实现的差不多了,只需做一些小小的改动贯通起来,我们的直播功能就能实现了。当然我们需要更好的效率,所以我们要使用硬编码,速度会快很多,节省树莓派宝贵的cpu资源,当然也更节省能源,绿色环保哦。
前面的帖子已经编译好了ffmpeg,并且是带h264硬编码和硬解码的,这里推流我们需要的是硬编码功能,上篇《一起玩树莓派3 + ffmpeg命令行工具使用及视频录制》中我们知道默认ffmpeg编码使用的是x264编码器,那我们如何指定使用硬件编码器呢?当然是直接指定啦,前面ffmpeg编译的时候我们已经讲过,树莓派的VideoCore IV的硬编码功能已经通过omx接口暴露给了我们,那我们直接指定h264_omx编码器,ffmpeg就可以自己调用啦。真是太方便了!
然后上篇帖子我们已经实现了录制文件到本地,这么推流给nginx-rtmp服务器呢?这里又有一些新的问题了,由于rtmp协议是为flash服务的,如果我们要推流到rtmp服务器,就需要录制flv格式的视频,而且输出不能是文件名了,而要是rtmp服务器的url了.之前我们配置好了nginx实现rtmp直播功能,直播地址根vod点播一样逻辑,rtmp://ip/live/stream_name。ffmpeg的命令行功能非常强大,可以让我们不需要编程,就能实现绝大多数功能。甚至有人直接将ffmpeg可执行文件集成到项目中,然后通过参数调用ffmpeg新建进程来实现需要的功能。比如有的服务器需要实时转码用户的上传的视频,就可以通过ffmpeg命令行来实现。说这么多,还是直接上图吧:

有图才有真相,注意上图中第二个红色方框框出来的部分是rtmp推流跟录制文件的区别,picam是推流时随便指定的流名称,播放器播放时需要跟这个链接相一致。第一个红色方框则是指定omx硬编码加速,绿色方框也提升我们,ffmpeg调用了博通的omx encode。黑色方框可以看到实时的推流状态,从图中可以看出,15fps稳定推流,由于usb摄像头的usb速率限制,高分辨率时fps会有所下降,当时720p 10fps基本没有问题,树莓派3还是让我很惊喜的,如果换成csi接口的摄像头,fps和分辨率都可以开到很高,编码速度方面我相信使用上硬编码也完全没有问题。

推流完成之后,我们如果需要观看直播流怎么办呢?很简单,找个支持rtmp的播放器就行了,本身ffplay也是支持播放的,只需执行ffplay -i rtmp://192.168.15.101/live/picam即可,非常方便。当然还有其它更友好的播放器可以选择了,比如VLC,还能跨平台使用,无论手机、windows、linux、mac都可以。下面上个效果图,注意看树莓派桌面上的cpu占用只有4%哦,虽然看起来有点夸张,单目测平均下来cpu占用就在5%左右,要知道这可是包括了视频采集、编码、推流,更有nginx服务器同时工作,结果相当令人满意,甚至说树莓派3的性能已经超出了我的预期太多!

摄像头直接拍摄屏幕,左上角脚窗口为vlc播放的摄像头画面,可以看到延迟有11秒左右,其实真正的延迟很低,大概1.5s左右,只是vlc开了缓冲的缘故,导致延迟很高。


前面的测试都是在局域网中完成的,但是直播怎么能只在家里看呢?那不是没多少意义了!本来我们的初衷就是为了那树莓派3当监控摄像头的,如果我去上班了,不能看家里的情况,还有什么意义呢?那么问题来了,我在外面怎么连接树莓派上的rmpt服务器呢且不要着急,有办法的。只不过折腾多一点罢了。当然这有几点前提:电信宽带,路由器拨号,路由器wan口ip跟公网ip相同。如果符合以上几点,那公网看家里视频,分分钟能解决的事情,只需做一个端口映射就成。怎么做呢?让你的树莓派直接连接家里宽带拨号的路由器,然后进入路由器设置界面,找到端口映射设置,新增一个 wan口1935的tcp端口到树莓派ip 1935tcp端口的映射,就可以用rmtp://公网ip/live/picam这个链接在任何地方访问树莓派的摄像头了贴一个我的端口映射设置(我使用的pandora的路由器固件,其它路由器端口映射设置请自行搜素)

本篇就到这里啦,发帖真特么累,累死累活的累,但坚持下来了,还是很高兴的!另还欠一篇总结帖
另外前面还有一些小小的错误需要修正,坑慢慢填了


------------------------- 割一下 --------------------------
本篇通过ffmpeg命令行方式实现了硬编码rtmp直播,其实大多数项目中并不一定是这么做的,比如手机上,就不能直接这么用了,系统限制了一些功能没法使用,比如摄像头采集,没法直接读取v4l2驱动文件,这样的情况就需要自己通过ffmpeg的一系列api了,也就是二次开发,本次测评结束之后,再另开篇讲点二次开发的东西

PS. wan口ip和公网是否一致查看方法看下图,左边为路由器wan口状态,右边为ip.cn查询到的公网ip,可以看到是一致的。


PS+. 友情提示:如果发现wan口不是公网ip,而你又是路由器直接拨号的电信宽带的话,那你可以骚扰一下10000号客服小妹,让电信帮你改成公网ip即可,一般很快就能生效。抛开电信宽带死贵、还特么上下行带宽严重不对等不说,还是要为电信的服务点个赞的






最新回复

抱贴边跑边喊大佬666   详情 回复 发表于 2019-9-18 16:24

赞赏

3

查看全部赞赏

点赞(1) 关注(8)
个人签名HELLO_WATER

回复
举报

2144

帖子

3

TA的资源

五彩晶圆(中级)

沙发
 
rtmp 这个给力了
赞一个
 
个人签名电工
 

回复

6040

帖子

195

TA的资源

版主

板凳
 
这样的情况就需要自己通过ffmpeg的一系列api了,也就是二次开发,本次测评结束之后,再另开篇讲点二次开发的东西

说好了的,可不能太监哦!!
 
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

4
 
找客户小妹要公网IP,她会说,滚
 
 
 

回复

1158

帖子

2

TA的资源

版主

5
 
6666,这个很赞,给楼主顶一个!
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

6
 
lcofjp 发表于 2016-11-21 10:43
说好了的,可不能太监哦!!

不能,请队长监督~
 
个人签名HELLO_WATER
 
 

回复

1366

帖子

6

TA的资源

版主

7
 
虽然你说我是不是文科生派来的卧底,但好像帖子的端口映射我好像看懂了。
  追风牛逼,我要马克。
 
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]

 
 

回复

1903

帖子

0

TA的资源

版主

8
 
很好的经验,有时间也研究一下
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

9
 
收藏,学习!
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

10
 
想请问楼主:我想用树莓派3进行多路视频的硬压缩,不知道能不能实现?
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

11
 
树莓派3的不足:
1. 没有EMMC,脱离SD卡无法自行工作;
2. 好像不是工业级。
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

12
 
我已经买了树莓派的板子,准备试试看如何使用开始我的项目。感觉有牛人开先河,我们在后面就比较容易成功!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 
"树莓派3还是让我很惊喜的,如果换成csi接口的摄像头,fps和分辨率都可以开到很高,编码速度方面我相信使用上硬编码也完全没有问题"

请教下楼主,如果用CSI摄像头,命令是 怎么样的 ? 感谢 ;

ffmpeg -f v4l2 -r 15 -video_size vga -pix_fmt yuv420p -i /dev/video0 -b:v 500k -c:v h264_omx -an -f flv rtmp://localhost:1935/rtmp/live
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

14
 
public_rtos 发表于 2017-1-4 15:10
想请问楼主:我想用树莓派3进行多路视频的硬压缩,不知道能不能实现?

多路不一定支撑,我没试过,你可以同时开2个命令看看
 
个人签名HELLO_WATER
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

15
 
szhansen 发表于 2017-2-25 15:18
"树莓派3还是让我很惊喜的,如果换成csi接口的摄像头,fps和分辨率都可以开到很高,编码速度方面我相信使用 ...

命令一样的,你只要看一下/dev目录下的video设备是video几,然后命令里直接写video几就行了,跟摄像头接口没有关系
 
个人签名HELLO_WATER
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

16
 
szhansen 发表于 2017-2-25 15:18
"树莓派3还是让我很惊喜的,如果换成csi接口的摄像头,fps和分辨率都可以开到很高,编码速度方面我相信使用 ...

命令一样的,你只要看一下/dev目录下的video设备是video几,然后命令里直接写video几就行了,跟摄像头接口没有关系
 
个人签名HELLO_WATER
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

17
 
我用你的命令,和步骤,在查看流的时候会卡顿。您能解惑一下嘛
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

18
 
al_bat 发表于 2017-3-8 16:12
我用你的命令,和步骤,在查看流的时候会卡顿。您能解惑一下嘛

具体什么现象,环境描述一下,卡顿有很多原因的,这个就复杂了,网络、cpu占用、摄像头采集帧率。。。
 
个人签名HELLO_WATER
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

19
 
是否能通过C直接获取到硬编码后h264数据?
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

20
 
kerros 发表于 2017-3-20 19:30
是否能通过C直接获取到硬编码后h264数据?

也可以的,通过ffmpeg编程,或者直接codec编程都可以
 
个人签名HELLO_WATER
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表