看了一遍又一遍的nginx.config配置项说明,在Exec节是看到了不用在外面写发起推流的命令的希望,今天终于试验出来,当然也是在github issue上翻看广大网友的智慧留言。
https://github.com/arut/nginx-rtmp-module/issues/447
关键配置如下:
http {
server {
listen 80;
location /live { ##这个是H5 video 观看的live源
flv_live on;
chunked_transfer_encoding on;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
}
}
}
rtmp{
server {
listen 1935;
application hknews{
live on;
exec_pull /bin/sh /etc/ffpush.sh ##在观众进行观看时拉流触发命令,命令为将源rtsp流推到hknews上
}
}
}
ffpush.sh的内容如下:
ffmpeg -i "rtsp://192.168.3.193:554/session0.mpg" -pix_fmt yuv420p -c:v copy -c:a copy -f flv "rtmp://127.0.0.1:1935/hknews/tvb"
只要注意下sh的路径和ffmpeg的路径,在外部能调用sh成功的话,nginx也能成功调用。
这时只需要用vlc观看这个地址: http://127.0.0.1/live?app=hknews&stream=tvb 也可以放入网页的video标签内。在观看的时候就会触发转码推流的命令,多个播放也只会触发一次,不好的地方在于停止观看后推流的进程还在继续执行,而且第一次观看等待的时间较长。