串流時如何在 ffmpeg 中設定 -profile main

串流時如何在 ffmpeg 中設定 -profile main

我嘗試使用 ffmpeg 將我的桌面串流傳輸到 ffsever 伺服器,我發現瀏覽器不會僅播放主要和較低的 H.264(高配置文件)視頻,所以我添加了

-c:v libx264 -profile:v high -level:v 4.0

我的 CLI 位元出現錯誤

Undefined constant or missing '(' in 'high'

這是我的 CLI

ffmpeg -probesize 1000M -framerate 60 -video_size 1680x1050 -f x11grab -i :0.0 -f alsa -i default -c:a aac -c:v libx264 -profile:v high http://localhost:8090/feed1.ffm

這是整個日誌

Press [q] to stop, [?] for help
[x11grab @ 0x55b5676c39e0] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[mpeg1video @ 0x55b567710920] [Eval @ 0x7ffe6c87d5d0] Undefined constant or missing '(' in 'high'
[mpeg1video @ 0x55b567710920] Unable to parse option value "high"
[mpeg1video @ 0x55b567710920] Error setting option profile to value high.
Error initializing output stream 0:1 -- Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
[aac @ 0x55b56771d3e0] Qavg: -nan
[alsa @ 0x55b5676ccc00] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
Conversion failed!

編輯: 這是我的 CLI

./ffmpeg -probesize 1000M -framerate 60 -video_size 1680x1050 -f x11grab -i :0.0 -f alsa -i default -c:a aac -c:v libx264 http://localhost:8090/feed1.ffm

這是我的ffserver.conf

<Stream h264>
Format webm
Feed feed1.ffm
VideoCodec libx264
VideoFrameRate 24
VideoBitRate 100
VideoSize 480x272
#AVPresetVideo default
#AVPresetVideo baseline
AVOptionVideo profile main
PixelFormat yuv420p
#
AudioCodec aac
AudioBitRate 32
AudioChannels 2
AudioSampleRate 22050
AVOptionAudio flags +global_header
</Stream>

這樣的設定不會在瀏覽器中顯示視頻

答案1

您正在使用 mpeg1video 而不是 libx264 進行編碼。

mpeg1video 不支援-profile:v high.

我猜測和所有其他輸出選項對於 FFM 輸出都會被忽略,並且編碼器由in-c:v決定。 (但我很懶,沒有確認,也沒有使用 的經驗。)如果您沒有設置,則可能會選擇預設編碼器,由中的選擇決定。VideoCodecffserver.confffserverVideoCodecFormatffserver.conf

在您的<Stream>部分中添加:

VideoCodec libx264
AudioCodec aac
AVOptionVideo profile main
PixelFormat yuv420p

相關內容