最近在星网视易实习,主要是使用ffmpeg进行音视频开发,于2020年7月9日。
主要问题描述:使用ffmpeg进行hls推流的时候,发现无法保存m3u8,ts文件,多度以为是路径问题的同学看这篇文章就够了。
windows搭建nginx+rtmp不在详述,各种文章都写了。这边主要针对解释一下其他文章忽略的一些点。
-
先看nginx安装的目录树,如下:
这个文件夹需要和nginx.conf对应起来,这边贴一下我的配置参数:
worker_processes 1;
error_log logs/error.log info;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
application live {
live on;
}
application hls {
live on;
hls on;
hls_path D:/OtherApp/Nginx/hls; #看这里用了绝对路径
hls_fragment 3s;
hls_playlist_length 120s; #m3u8和ts在hls文件夹下的保存时间
}
}
}
http {
server {
listen 8080;
location / {
root html;
}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root nginx-rtmp-module-master/;
}
location /control {
rtmp_control all;
}
location /hls { #这个hls和推流命令对应
#server hls fragments
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias D:/OtherApp/Nginx/hls; #还有这里
expires -1;
}
}
}
这边要注意的是修改nginx.conf文件后必须重启nginx服务:
nginx -s reload
,重启后再去执行其他操作。
可以看到,hls出现了四次,其中两个是保存m3u8和ts的文件夹。还有两个对应于ffmpeg推流命令:
ffmpeg -re -i input.mp4 -vcodec libx264 rtmp://127.0.0.1:1935/hls/room
- 这个时候你的hls文件夹下一般情况下就有了m3u8和ts文件,如下:
问题出在哪里呢????
请看nginx-rtmp-module下的README.md
到这里我才恍然大悟!!!原来推流必须转码!!!!video→libx264;audio→aac!!!啊终于搞定~
这里的libx264和aac都是ffmpeg里的编码格式,可以通过
ffprobe -codecs
来查看各种编码
总结:
- 修改nginx.conf需要重启服务
- hls名称和路径要对应
- 音视频分别对应aac和h264编码,推流记得转码