制作直播源

  • 环境说明
  • 一、安装依赖
  • 二、下载扩展
  • 三、编译安装nginx
  • 四、修改nginx配置文件
  • 五、模拟推流
  • (0)下载一个视频文件
  • (1)rtmp模拟推流
  • (2) hls模拟推流


环境说明

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 输入地址 即可测试播放