web-dev-qa-db-ja.com

FFMPEGを使用してWebカメラのビデオをYouTubeにストリーミングする

私はffmpegを使用してウェブカメラのビデオをYouTubeにストリーミングしようとしてきましたが、これまで管理してきたのは、YouTubeからの「開始」という緑色の「確認」だけでした。ただし、すぐに灰色になり、実際のストリームがオフラインから実際に変更されることはありません。

私はこのコマンドを使用してストリーミングを試みています:

_ffmpeg -rtbufsize 1500M -r 25 -f dshow -s 1280x720 -i video="USB2.0 HD UVC WebCam" -vcodec h264 -b:a 600k -acodec libfaac -ab 128k -f flv "rtmp://a.rtmp.youtube.com/live2/user.useruser.codecodecode"_

[〜#〜] cmd [〜#〜]

私はffmpegを使ってYouTubeにビデオをストリーミングすることができました。ffmpegは機能しないカメラだけです。私が間違っているかもしれない何か考えはありますか?

これは私が今使っているコマンドですffmpeg -r 18 -f dshow -s 1280x720 -i video="USB2.0 HD UVC WebCam":audio="Microphone (Realtek High Definition Audio)" -vcodec h264 -b:v 1800k -acodec aac -strict experimental -f flv "rtmp://a.rtmp.youtube.com/live2/useruser.useruser.codecodecodecode"

「不明なエンコーダ」エラーが発生したため、libfaacまたはlibfdk_aacの代わりに_-acodec aac_を使用しています。

ストリーミングは数秒ですが、次のエラーが発生します: WriteN、RTMP送信エラー1005

これらが何を意味するのか、またはそれらを修正する方法はありますか?

5
Indes

コマンドにはいくつか問題があります。

  • オーディオストリームがありません。 dshowを使用する場合は、説明されているようにaudioも指定する必要があります ここ

    ffmpeg -f dshow -i video="Integrated Camera":audio="Microphone name here"

    オーディオをキャプチャする予定がない場合は、サイレントオーディオトラックを配置します。

  • -b:a-abと同じです-オーディオビットレート。ビデオのビットレートを指定するには、-b:vを使用する必要があります。 600kは、1280x720px @ 25fps H.264ビデオストリームには低すぎます。

    YouTube 推奨

    720p

    ビデオビットレート範囲:1,500〜4,000 Kbps

    少なくとも1800kを入れる必要があります。

  • 使用しているオーディオに関してはlibfaacAACをエンコードするときに最良の結果を得るには、 推奨libfdk_aacを使用します。

2
aergistal

FFmpegを使用してIPカメラをYoutubeにライブストリーミングします。 -Ubuntuユーザーの場合(私がしたこと)

  1. 最新のffmpegをubuntu12.04または14.04にインストールします https://Gist.github.com/xdamman/e4f713c8cd1a389a5917 そして

  2. UbuntuでFFmpegをコンパイルする https://Gist.github.com/faleev/3435377

  3. Youtubeを開きます。ログインする。 [マイチャンネル]> [ビデオマネージャー]> [ライブストリーミング]をクリックします。 「ストリーム名/キー」に注意してください。

  4. 静的ビデオファイルの場合:

    ffmpeg -re -i "(input-file)"  -acodec libmp3lame  -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 2048k -vb 400k -maxrate 800k -deinterlace -vcodec libx264 -preset medium -g 30 -r 30 -f flv "rtmp://a.rtmp.youtube.com/live2/(Stream name/key)"
    
  5. Rtspビデオのみの出力でIPカメラからビデオをストリーミングする場合:

    ffmpeg -re -i input-file  -rtsp_transport tcp -i "rtsp://password@(streamaddress with local IP)"  -acodec libmp3lame  -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline -s 426x240 -bufsize 2048k -vb 400k -maxrate 800k -deinterlace -vcodec libx264 -preset medium -g 30 -r 30 -f flv "rtmp://a.rtmp.youtube.com/live2/(Stream name/key)"
    
1
Brijesh Verma

フルHDx264ビデオソースを備えたIPアドレスのウェブカメラがオーディオなしであり、ダイレクトカメラ画面をYouTubeにストリーミングしたい場合は、ビデオを常に低解像度にトランスコード/再エンコードする必要はありません。 YouTubeは、一部のカメラの直接ビデオストリームを受け入れることができます。唯一のことは、空の/サイレントオーディオトラックを追加する必要があるということです。ネットワークに十分な帯域幅がある場合は、機能するはずです。

Ubuntu16.04のPine64 +でこのCLIコマンドを使用していますが、機能しています。

ffmpeg -re -rtsp_transport tcp -i "rtsp://<user>:<pass>@<camera_ip>:<port>" /
       -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 /
       -c:a libmp3lame -ab 128k -ar 44100 /
       -c:v copy -threads 2 -bufsize 512k /
       -f flv "rtmp://a.rtmp.youtube.com/live2/<your-live-stream-key>"

(Libavfilter入力仮想デバイスに関する情報は次のとおりです: https://www.ffmpeg.org/ffmpeg-devices.html#lavfi

これにより、CPU使用率を最小限に抑えて、サイレントオーディオを備えたダイレクトカメラ画面をYouTubeに転送できます。

いくつかの制限:

  1. ネットワークがダウンしている場合(たとえば、ISPがネットワークを更新したり、パブリックIPを変更したり、ルーターを再起動したりすると)、ffmpegは信号(WebカメラやYouTube RTSP)を失います。
  2. 私が時々見たように、YouTubeはストリームの受信を停止し、最後のデータをビデオファイル(アーカイブストリーミングビデオ)に変換し、その後、ライブストリームの新しい識別子を作成します。これはffmpegの動作(RTSP接続が失われた)に影響し、YouTubeライブストリームコードを挿入したWebページに影響します。 (YouTubeが1つの作品で最大12時間のビデオを処理することがわかったので)。

どちらの場合も、ffpmegはネットワークまたはストリームの問題を検出できませんでした。したがって、終わりのないストリームをストリーミングしたい場合、正しく自動化するのは困難です。

  • どういうわけかあなたはネットワークエラーを検出する必要があります。
  • どういうわけか、YouTubeがRTSPでのリスニングを停止したことを検出する必要があります。
  • どういうわけか、ffmpegがカメラとの通信を失ったかどうかを検出する必要があります。
  • そして最後に、すべてのサービスが再び機能しているときに、どういうわけかffmpegを再起動する必要があります。

一時的に私は小さなcronジョブを使用しており、1時間ごとにffmpegを再起動します。

1
William