环境说明
Deepin V20bata 版 ubuntu20
本机 IP 192.168.78.131
一、安装依赖
sudo apt-get update -qq && sudo apt-get -y install autoconf automake build-essential cmake git libass-dev libfreetype6-dev libgnutls28-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget yasm zlib1g-dev
二、下载扩展
# 进入自己的扩展保存目录 下载 nginx-rtmp-module
# 本地测试环境虚拟机 所以在家目录下 /home/marhal
git clone https://github.com/arut/nginx-rtmp-module.git
三、编译安装nginx
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar zxvf nginx-1.14.2
cd nginx-1.14.2
./configure --add-module=/home/marhal/nginx-rtmp-module
sudo make && make install
# 注意 这里可能会报错
# nginx-rtmp-module/ngx_rtmp_eval.c:160:17: error: this statement may fall through [-Werror=implicit-fallthrough=]
# 进入nginx 下载目录的objs 编辑Makefile
vim objs/Makefile
# 第三行 将`-Werror` 删掉
# 最终结果为 CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g
# 保存 重新make
sudo make && make install
# 启动nginx
sudo /usr/local/nginx/sbin/nginx
# 平滑重启
sudo /usr/local/nginx/sbin/nginx -s reload
四、修改nginx配置文件
sudo vim /usr/local/nginx/conf nginx.conf
添加如下,跟 http{} 平级
rtmp_auto_push on;#切换自动推送(多 worker 直播流)模式。默认为 off
rtmp_auto_push_reconnect 1s;#当 worker 被干掉时设置自动推送连接超时时间。默认为 100 毫秒
rtmp {
server {
listen 1935;
chunk_size 4000;
#RTMP直播流配置
application rtmplive {
live on;
max_connections 1024;
}
# HLS 直播流配置
application hls {
live on;#开启实时
hls on;#开启hls
hls_path /var/www/html/zhibo/hls;//将转换后的文件在这个位置
hls_fragment 5s;#每个TS文件包含5秒的视频内容
}
}
}
修改如下,加入location
http {
server {
location /hls{
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /var/www/html/zhibo/hls/www;
add_header Cache-Control no-cache;
# 解决跨域
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
}
}
}
根据 hls 的文件生成目录 再增加一个站点
server {
listen 80;
server_name live.local.com;
location / {
root /var/www/html/zhibo/hls;
index index.html index.htm;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-allow-Headers X-Requested-with;
add_header Access-Control-allow-Methods GET,POST,OPTIONS;
}
}
五、模拟推流
(0)下载一个视频文件
本机测试的视频目录为 home/marhal/Downloads/1.mp4
(1)rtmp模拟推流
命令行执行
# 需要注意的是 rtmp://192.168.78.131:1935/rtmplive/rtmp
# 这里的 rtmplive 对应着刚才nginx的 RTMP直播流配置 路径
# 这里的 rtmp 是自定义名称
ffmpeg -re -i "/home/marhal/Downloads/1.mp4" -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://192.168.78.131:1935/rtmplive/rtmp
# 或者简单一些
ffmpeg -re -i /home/marhal/Downloads/1.mp4 -vcodec libx264 -acodec aac -f flv rtmp://192.168.78.131:1935/rtmplive/rtmp
参数说明
-vcodec libx264 表示 视频的编码器为H264
vprofile baseline 设置音视频编码器的类
-acodec aac 指定声音的编码器为AAC
-ar 44100 设定音频编解码器的采样率,整数,单位Hz。
-ac 1 设置音频编解码器的声道数目
-f flv 强制设定输入和输出文件格式
-s 1280x720 设置图像分辨率
检测的推流地址为
rtmp://192.168.78.131:1935/rtmplive/rtmp
可以下载 VLC播放器,点击 媒体
打开网络串流
或者 ctrl+n
输入地址 即可测试播放
(2) hls模拟推流
# 需要注意的是 rtmp://192.168.78.131:1935/hls/stream
# 这里的 hls 对应着刚才nginx的 RTMP直播流配置 路径
# 这里的 stream 是自定义名称
ffmpeg -re -i "/home/marhal/Downloads/1.mp4" -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://192.168.78.131:1935/hls/stream
# 或者简单一点
ffmpeg -re -i /home/marhal/Downloads/1.mp4 -vcodec libx264 -acodec aac -f flv rtmp://192.168.78.131:1935/hls/stream
检测的推流地址为
rtmp://192.168.78.131:1935/hls/stream
可以下载 VLC播放器,点击 媒体
打开网络串流
或者 ctrl+n
输入地址 即可测试播放