社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 精华区
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
搜索
查看: 10034|回复: 32

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

  [复制链接]

1260

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2016-11-21 01:50:45 | 显示全部楼层 |阅读模式
好了,进入本系列测评的尾声了,直播系统测试已经完成,也有网友已经体验过了,拖延症帖子也该发了

先简单介绍一下整个系统的组成:
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命令行来实现。说这么多,还是直接上图吧:
QQ20161121-4@2x.png
有图才有真相,注意上图中第二个红色方框框出来的部分是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的性能已经超出了我的预期太多!
Screen Shot 2016-11-19 at 2.59.54 AM.png
摄像头直接拍摄屏幕,左上角脚窗口为vlc播放的摄像头画面,可以看到延迟有11秒左右,其实真正的延迟很低,大概1.5s左右,只是vlc开了缓冲的缘故,导致延迟很高。


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


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

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

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






评分

3

查看全部评分

HELLO_WATER

回复

使用道具 举报

2348

TA的帖子

3

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

发表于 2016-11-21 09:28:03 | 显示全部楼层
rtmp 这个给力了
赞一个
电工

回复

使用道具 举报

4970

TA的帖子

67

TA的资源

版主

Rank: 6Rank: 6

发表于 2016-11-21 10:43:13 | 显示全部楼层
这样的情况就需要自己通过ffmpeg的一系列api了,也就是二次开发,本次测评结束之后,再另开篇讲点二次开发的东西

说好了的,可不能太监哦!!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵

回复

使用道具 举报

114

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2016-11-21 11:38:14 | 显示全部楼层
找客户小妹要公网IP,她会说,滚

回复

使用道具 举报

1183

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2016-11-21 13:44:23 | 显示全部楼层
6666,这个很赞,给楼主顶一个!

回复

使用道具 举报

1260

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

 楼主| 发表于 2016-11-21 13:50:52 | 显示全部楼层
lcofjp 发表于 2016-11-21 10:43
说好了的,可不能太监哦!!

不能,请队长监督~
HELLO_WATER

回复

使用道具 举报

511

TA的帖子

5

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2016-11-21 14:49:14 | 显示全部楼层
虽然你说我是不是文科生派来的卧底,但好像帖子的端口映射我好像看懂了。
  追风牛逼,我要马克。

回复

使用道具 举报

277

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2016-11-21 19:30:35 | 显示全部楼层
很好的经验,有时间也研究一下

回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-1-4 15:09:35 | 显示全部楼层
收藏,学习!

回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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

回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-1-4 15:15:55 | 显示全部楼层
树莓派3的不足:
1. 没有EMMC,脱离SD卡无法自行工作;
2. 好像不是工业级。

回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-1-4 15:16:56 | 显示全部楼层
我已经买了树莓派的板子,准备试试看如何使用开始我的项目。感觉有牛人开先河,我们在后面就比较容易成功!

回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-25 15:18:29 | 显示全部楼层
"树莓派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

回复

使用道具 举报

1260

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

 楼主| 发表于 2017-2-26 09:46:03 | 显示全部楼层
public_rtos 发表于 2017-1-4 15:10
想请问楼主:我想用树莓派3进行多路视频的硬压缩,不知道能不能实现?

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

回复

使用道具 举报

1260

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

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

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

回复

使用道具 举报

1260

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

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

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

回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-3-8 16:12:29 | 显示全部楼层
我用你的命令,和步骤,在查看流的时候会卡顿。您能解惑一下嘛

回复

使用道具 举报

1260

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

 楼主| 发表于 2017-3-9 09:35:36 | 显示全部楼层
al_bat 发表于 2017-3-8 16:12
我用你的命令,和步骤,在查看流的时候会卡顿。您能解惑一下嘛

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

回复

使用道具 举报

13

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-3-20 19:30:10 | 显示全部楼层
是否能通过C直接获取到硬编码后h264数据?

回复

使用道具 举报

1260

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

 楼主| 发表于 2017-3-21 09:23:11 | 显示全部楼层
kerros 发表于 2017-3-20 19:30
是否能通过C直接获取到硬编码后h264数据?

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

回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-9-25 03:35 , Processed in 0.615695 second(s), 19 queries , Redis On.

快速回复 返回顶部 返回列表