直播火了好几年了,当然要了解下原理。
周末使用RTMP做了几个简单实验,记录如下:
获取所有可以录制的视频源
1 2 3 4 5 6 7 8 9
| $ ffmpeg -devices $ ffmpeg -f avfoundation -list_devices true -i ""
[AVFoundation input device @ 0x7ff7d0504640] AVFoundation video devices: [AVFoundation input device @ 0x7ff7d0504640] [0] FaceTime HD Camera [AVFoundation input device @ 0x7ff7d0504640] [1] Capture screen 0 [AVFoundation input device @ 0x7ff7d0504640] AVFoundation audio devices: [AVFoundation input device @ 0x7ff7d0504640] [0] Built-in Microphone
|
推流一个本地文件
1
| $ ffmpeg -re -stream_loop -1 -i out.mp4 -vcodec libx264 -acodec aac -f flv rtmp://xxxx.com:1935/hls/test
|
录制屏幕
1
| $ ffmpeg -f avfoundation -i "Capture screen 0" -r:v 30
|
播放视频
1
| $ ffplay https://xxxx.com/hls/test.m3u8
|
录制屏幕并推流
1
| $ ffmpeg -f avfoundation -i "Capture screen 0" -r:v 30 -vcodec libx264 -acodec aac -f flv rtmp://xxxx.com:1935/hls/test
|
推流工具
实际使用中,一般都会采用OBS进行推流。
附:Nginx上安装rtmp服务器
下载源码、编译与安装
从下面两个地址找到源码包
最新的Nginx源代码
openssl最新源码地址
然后,解压缩到~/softs/
目录下,再下载一份nginx-rtmp-module到~/softs/
目录,然后三个包一起编译、安装:
1 2 3 4 5 6 7 8 9 10
| $ cd ~/softs/ $ wget https://nginx.org/download/nginx-1.17.6.tar.gz $ tar zxvf nginx-1.17.6.tar.gz $ wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz $ tar zxvf openssl-1.1.1d.tar.gz $ git clone https://github.com/arut/nginx-rtmp-module $ cd nginx-1.17.6/ $ ./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-openssl=../openssl-1.1.1d --add-module=../nginx-rtmp-module $ make $ make install
|
安装完毕后,执行命令测试是否安装成功:
然后通过浏览器访问80端口: http://localhost/
如果看到Nginx欢迎页,说明安装成功,就可以继续配置环节了。
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| rtmp { server { listen 1935; application live { live on; } application hls { live on; hls on; hls_path /tmp/hls; } application vod { play /tmp/video; } } }
location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; }
|
配置完成后重启就可以接收推流了