2017-02-22 62 views
0

私は、ライブhlsとmpeg-dashをストリームするためにnginxとrtmpモジュールを使用しています。 はここffmpeg execコマンドがnginx rtmpで実行されていない

rtmp { 
server { 
    listen 1936; 


    application mypull { 
    live on ; 
    meta copy; 
    allow play all; 

    pull rtmp://184.72.239.149/vod/BigBuckBunny_115k.mov name=test live=1; 


    exec_push /usr/bin/ffmpeg -re -i rtmp://localhost:1936/mypull/$name -vcodec libx264 -acodec libmp3lame -f flv rtmp://localhost:1936/hls/$name; 


} 


application dash { 
     live on; 
     dash on; 
     dash_path /tmp/dash; 
     dash_nested on; 
     dash_fragment 5s; 
     dash_playlist_length 30s; 
    } 
    application hls { 
     live on; 
     hls on; 
    hls_playlist_length 30s; 
    hls_fragment 5s; 
     hls_path /tmp/hls; 
    } 
} 
} 

.confをnginxの中の私のRTMPコマンドですが、それは演奏されません。 ffmpegコマンドが実行されていないようです。 hlsとdashフォルダは空です。誰もそれで私を助けることができますか?

+0

としてあなたのコマンドを実行しますが、コマンドラインからffmpegのコマンドの作業を行います? –

+0

これは実際のIDです。私のnginx.confはまさにこのようなものです。出力を作成しません。 @GergelyLukacsy – evan

+0

いいえ。ストリームIDは '$ name'変数に代入されています。ストリームを開くと、URLは 'rtmp://server.com:1935/mypull/12345'のようになります。ここで' 12345'はストリームIDです。 この場合、何か代用できると思いますので、これはあなたのコンソールです: 'ffmpeg -re -i rtmp:// localhost:1936/mypull/123 -vcodec libx264 -acodec libmp3lame -f flv rtmp:// localhost:1936/hls/123' また、ファイアウォールの設定でポートが開いていることを確認してください。なぜあなたはRTMPのために1936を使用していますか?デフォルトは1935です。 –

答えて

0

ffmpegコマンドをbashスクリプトに入れます。スクリプト全体ffmpegのコマンドを入れて、それが実行可能に

を例えば、私のbashスクリプトをff.shという名前で、フォルダ/ファイルに格納されます。

chmod +x /files/ff.sh 

はnginxのでスクリプトをexec_push。 conf

application origin { 
live on; 
exec_push /files/ff.sh; 
} 

これはあなたのために働くことがあります。

0

編集しnginx.confファイルと、最初の行に置く:

user root; 

これは、実際のstreamIDでで変数を交換した後、ルート

関連する問題