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

2023-05-16

树莓派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视频流
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐