我尝试使用 ffmpeg 将我的桌面传输到 ffsever 服务器,但我发现浏览器无法播放 H.264(High profile)视频,只能播放主视频和低端视频,因此我添加了
-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 输出都被忽略,并且编码器由中-c:v
确定。(但我太懒了,没有确认,也没有使用过。)如果您没有设置,那么可能会选择默认编码器,由中选择的确定。VideoCodec
ffserver.conf
ffserver
VideoCodec
Format
ffserver.conf
在您的<Stream>
部分中添加:
VideoCodec libx264
AudioCodec aac
AVOptionVideo profile main
PixelFormat yuv420p