看了一遍又一遍的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標籤內。在觀看的時候就會觸發轉碼推流的命令,多個播放也只會觸發一次,不好的地方在於停止觀看後推流的進程還在繼續執行,而且第一次觀看等待的時間較長。