树莓派ffmpeg直播推送,nginx视频流接受转码,客户端hls rtmp视

4 篇文章 0 订阅
2 篇文章 0 订阅

树莓派ffmpeg直播推送,nginx视频流接受转码,客户端hls rtmp视频流拉流

树莓派利用ffmpeg将摄像头视频流以rtmp视频流的格式,推送到安装有nginx,nginx-rtmp的云服务器端,在云服务器端会进行视频流的录制成flv格式或者转码成m3u8格式的hls视频流

ffmpeg,rtmp,hls简单了解

  • ffmpeg
    ffmpeg用于记录,转换和流传输音频和视频的完整的跨平台解决方案。
    这是ffmpeg的官方对ffmpeg的定义,ffmpeg官网FFmpeg
    说人话就是,这个工具特别强大,只要是图片视频相关的,他都能做,比如视频flv转成mp4格式,比如加个水印,比如做个直播推流到b站,播放视频收看直播等等…
  • rtmp
    RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信,flv格式。rtmp协议是由adobe公司开发,所以目前浏览器需要拉取rtmp视频流需要使用flash插件,因而在移动端浏览器无法播放rtmp视频流。
    优点:视频音频能够做到实时传输,延迟较小。
    缺点
    • 对流媒体服务器的带宽要求较高,如果服务器或者客户端浏览器带宽比较小会出现画面卡顿的情况。
    • 大部分手机端浏览器无法播放rtmp视频流。
  • hls
    • HLS (HTTP Live Streaming)是Apple的动态码率自适应技术。主要用于mac osx PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。
    • 工作原理:将整个视频切分成很多切片ts文件,用一个m3u8文件作为切片ts文件的索引文件,浏览器播放视频时,浏览器一边下载ts文件,一边渲染视频,而不用将整个文件下载下来之后再播放。
    • 优点:画面几乎无卡顿,在移动端适配性较好,可以直接播放。
    • 缺点:在直播系统中,相较于rtmp视频流,hls延迟较大。很多window的浏览器如chrome浏览器无法直接播放m3u8格式文件(Edge浏览器可以),但html5可以借助于hls.js播放m3u8格式视频流。
      作者:yywfy的昵称
      链接:https://www.jianshu.com/p/6de22b88dc73
      来源:简书
      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
准备工作
  • 带有摄像头的树莓派
  • 一台云服务器(Linux系统),如果没有也没有问题
  • 一台电脑
  • 一台手机
树莓派安装ffmpeg
sudo apt-get install ffmpeg
云服务器安装nginx,nginx-rtmp
sudo apt-get install nginx
sudo apt-get install libnginx-mod-rtmp
云服务器端 nginx.conf配置rtmp
sudo vim /etc/nginx/nginx.conf

在这里插入图片描述
在http模块上方写入下列配置

rtmp {
    server {
      listen 1935;      #监听的端口号
      application myapp {     #rtmp视频流
            live on;
       }
        application hls { #hls视频流
            live on;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 2s;
            #hls_playlist_length 12s;
       }
    }
}

简单介绍一下上面的参数

  • rtmp 表示nginx接受rtmp视频流
  • listen 1935 表示接受rtmp视频流的端口号
  • application myapp 表示接受的应用名为myapp,可以自定义
  • live on 表示处于接受rtmp的状态中
  • hls on 将接受到的rtmp视频转码成hls视频(也就是m3u8格式),切片成.ts文件,.m3u8作为索引文件
  • hls_path /tmp/hls 表示rtmp转码成hls视频流,也就是.ts .m3u8文件存储的地址,这个文件夹的权限要注意哦
  • hls_fragment 2s 表示每个切片ts文件的大小,太大了对于带宽较小的服务器会有卡顿
  • hls_playlist_length 12s; 表示播放列表的长度,进度条显示的长度,默认自动适应
服务器端 nginx.conf配置拉流的http接口
sudo vim /etc/nginx/nginx.conf

将下面的配置,写在http{server{}}里面

location /live {
                 types {
                   application/vnd.apple.mpegurl m3u8;
                   video/mp2t ts;
                 }
                   alias /tmp/hls/;   #这个路径和rtmp中hls切片保存路径一致
                   add_header Cache-Control no-cache;
                   # cross-origin 解决html5播放hls时出现跨域问题
                   add_header Access-Control-Allow-Origin *;

        }

注意事项:

  1. ts切片保存路径要和rtmp模块的一致
  2. 记得加上这行代码d_header Access-Control-Allow-Origin *;避免网页端播放出现跨域问题
开启云服务器的防火墙端口,启动nginx
  1. 注意给云服务器的1935,80端口放行,阿里云就直接在控制台安全组自定义一个开放端口。
  2. 启动nginx
sudo service nginx start
树莓派开始推流
  • 推流到hls应用
ffmpeg -i /dev/video0 -s 640x360 -vcodec libx264 -max_delay 100 -r 20 -b:v 1000k -b:a 128k -f flv rtmp://47.100.78.117:1935/hls/room1

注意window如果使用摄像头推流需要在ffmpeg后面添加 -f dshow 加载一个流媒体驱动
解析一下其中的参数

-i /dev/video0 表示视频输入源是 /dev/video0 即摄像头 ls /dev/就能查看到有一个video0的设备,也可以-i input.mp4用视频文件作为输入源
-s 640x360 表示图像的分辨率,如果太大了,容易出现卡顿情况
-vcodec libx264 一种视频编码格式
-max_delay 100 最大延迟时间
-r 20 这个表示每秒拍摄多少帧,也会影响的画面是卡顿
-b:v 1000k 表示传输视频流的码率
-b:a 128k 表示传输音频流的码率
-f flv rtmp://47.100.78.117:1935/hls/room1 表示传输的格式是flv,因为rtmp协议的视频流以flv格式传输,后面接的rtmp://ip:1935/hls/roomNum
ip地址也可以换成服务器的域名,hls是nginx.conf配置好的rtmp应用的名称,room1自定义的名称,类似于房间号
你只需要改ip地址即可

  • 推送到rtmp应用
ffmpeg -i /dev/video0 -s 640x360 -vcodec libx264 -max_delay 100 -r 20 -b:v 1000k -b:a 128k -f flv rtmp://47.100.78.117:1935/myapp/room1

改了rtmp应用的名称myapp

拉流
  • hls拉流
    拉流地址
http://47.100.78.117/live/room1.m3u8

live nginx.conf中location后的名称
room1 推流的房间号
手机端直接打开拉流地址即可播放,window用Edge浏览器播放,或者vlc播放器,但是谷歌火狐无法播放

  • rtmp拉流
    在vlc中串流地址写入下面的
rtmp://47.100.78.117:1935/myapp/room1
实际效果图

vlc播放rtmp视频流
在这里插入图片描述
win10自带的Edge浏览器播放hls视频流
在这里插入图片描述
手机端查看hls视频流
在这里插入图片描述

谷歌翻译: 如果相机拍照而没有人注意到,它真的发生了吗?在本书中,我们将向您展示如何制作基于Raspberry Pi的相机系统,以便您可以捕获延时图像并通过WiFi查看,如果检测到运动则触发相机,甚至可以执行基本面部认可作为机器学习方法的介绍。 拿一个Raspberry Pi并添加一个相机模块,你就有了一个可编程相机。添加一些软件,您就可以开始进行有趣的监和自动对象识别工作。将Pi激活为WiFi节点,您可以远距离完成所有这些美妙的事物。 一个好的监控系统不仅仅是拍照。它还应该将这些图片转化为可操作的信息,从而增加您的知识。现在可以在软件中轻松完成,我们将向您展示如何操作。 本书汇集了一系列小技巧 - 设置Pi相机,将Pi广播作为WiFi设备,增加时间流逝和运动检测和人脸识别,并在其上粘贴电池组,以便它可以在任何地方运行 - 创建便携式间谍相机。我们在“Find the Pi”派对比赛,在我们的实验室中实施隐私尊重的安全性,以及炫耀面部识别等现代技术的过程中使用了这些装备。其他用途可能包括监控鹿和野生动物,检查您的邮箱到达邮件,以及捕获自然事件或交通模式的延时序列。 我们的第一个项目是创建一个便携式“SpyPi”摄像机设备,通过WiFi广播图像而无需网络 - 您只需登录它即可查看摄像机看到的内容。它非常适合“寻找相机”狩猎挑战或独立安全。 第二个项目将涉及设置一个延时摄像头,可以进行简单的运动检测 - 非常适合监控位置。该系统将包括一周后自动删除旧图像。 第三个项目是为您的SpyPi添加面部检测和面部识别功能。在此过程中,您将了解这些项目结束时安装的工具和软件,以便您可以超越本书并探索其他机器学习方法。 所以抓住一个Pi,一个SD卡,一个USB摄像头和一个USB电池组,让我们走吧!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值