FFmpeg - social-robotics-lab/robo-tutorial GitHub Wiki

Windowsで使用できるデバイスを表示する

ffmpeg -list_devices true -f dshow -i dummy

Windows上でカメラの映像を表示する

ffplay -f dshow -i video="Surface Camera Front"

Windows上のカメラの映像をrtpでストリーミングする。(実行開始した時点からの映像が送られるため遅延がでる。)

ffmpeg -re -f dshow -i video="Surface Camera Front" -r 30 -c:v libx264 -an -f rtp rtp://localhost:5001 -sdp_file stream.sdp ffplay -protocol_whitelist "file,udp,rtp" stream.sdp

インプットデバイスがdshowかvideo4linux2かで使えるオプションが異なる。 オプションの詳細は公式サイトで確認

Edison上のカメラデバイスが扱えるフォーマットの確認

ffmpeg -f video4linux2 -list_formats all -i /dev/video0

UDPで送信?

ffmpeg -s 320x240 -f video4linux2 -i /dev/video0 -f mpeg1video -b 800k -r 30 udp://127.0.0.1:8082

RSTPでストリーミングをするためには、ストリーミングサーバを立てる必要がある。それには、nginxで構築する。

Sota:192.168.11.22, PC:192.168.11.4

UDPで送信

ffmpeg -f v4l2 -s 320x240 -thread_queue_size 8192 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -f h264 udp://192.168.11.4:5001?pkt_size=1024

Windowsの場合 ffmpeg -re -f dshow -i video="Surface Camera Front" -s 320x240 -r 30 -c:v libx264 -preset ultrafast -tune zerolatency -an -f h264 udp://localhost:5000?pkt_size=1024

UDPで受信

ffplay -fflags nobuffer udp://192.168.11.4:5001 TCPだと、サーバを起動してから、クライアントを起動するまでの時間差によって、映像の再生にずれ生じる。

Windowsでマイクの入力を録音する

ffmpeg -f dshow -i audio="マイク配列 (Realtek High Definition Audio(SST))" out.mp3

Windowsでマイク入力をUDPで自分自身に送信し、それを受信してwavにする

ffmpeg -f dshow -ac 1 -thread_queue_size 8192 -i audio="マイク配列 (Realtek High Definition Audio(SST))" -f s16le -c:a pcm_s16le -ar 16000 udp://127.0.0.1:5001?pkt_size=1024

ffmpeg -fflags nobuffer -f s16le -c:a pcm_s16le -ar 16000 -i udp://127.0.0.1:5001 output.wav