windows使用nginx+rtmp推流hls时候,无法生成m3u8,ts文件的解决办法

最近在星网视易实习,主要是使用ffmpeg进行音视频开发,于2020年7月9日。

主要问题描述:使用ffmpeg进行hls推流的时候,发现无法保存m3u8,ts文件,多度以为是路径问题的同学看这篇文章就够了。

windows搭建nginx+rtmp不在详述,各种文章都写了。这边主要针对解释一下其他文章忽略的一些点。

  1. 先看nginx安装的目录树,如下:

    nginx安装目录结构.png
    可以发现我这里的hls文件夹,就是后面保存m3u8和ts文件需要新创建的文件夹。

  2. 这个文件夹需要和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
  1. 这个时候你的hls文件夹下一般情况下就有了m3u8和ts文件,如下:
m3u8出现了.png

问题出在哪里呢????

请看nginx-rtmp-module下的README.md

h264&aac.png

到这里我才恍然大悟!!!原来推流必须转码!!!!video→libx264;audio→aac!!!啊终于搞定~

这里的libx264和aac都是ffmpeg里的编码格式,可以通过ffprobe -codecs 来查看各种编码

总结:

  • 修改nginx.conf需要重启服务
  • hls名称和路径要对应
  • 音视频分别对应aac和h264编码,推流记得转码

你可能感兴趣的:(windows使用nginx+rtmp推流hls时候,无法生成m3u8,ts文件的解决办法)