FFmpeg drawbox 和 ZMQ b'38 功能未实现'
FFmpeg drawbox and ZMQ b'38 Function not implemented'
我正在尝试动态控制由 ffmpeg 公开的 rtsp 流上框的大小和位置。我找到了一个基于 zmq 的潜在解决方案。我已经用 zmq 支持重新编译了 ffmpeg,并使用命令 运行 流
ffmpeg -re -rtsp_transport tcp -stimeout 1000000 -i "rtsp://<STREAM_ADDR>" -pix_fmt bgra -filter_complex zmq,drawbox=x=10:y=10:w=50:h=50:c=red -f fbdev /dev/fb0
然后我尝试使用来自 ffmpeg 回购工具的 python3 脚本发送更新(我修改它以调整 python3)
import sys, zmq, cmd
class LavfiCmd(cmd.Cmd):
prompt = 'lavfi> '
def __init__(self, bind_address):
context = zmq.Context()
self.requester = context.socket(zmq.REQ)
self.requester.connect(bind_address)
cmd.Cmd.__init__(self)
def onecmd(self, cmd):
if cmd == 'EOF':
sys.exit(0)
print('Sending command:[%s]' % cmd)
self.requester.send_string(cmd)
message = self.requester.recv()
print('Received reply:[%s]' % message)
try:
bind_address = sys.argv[1] if len(sys.argv) > 1 else "tcp://localhost:1235"
LavfiCmd(bind_address).cmdloop('FFmpeg libavfilter interactive shell')
except KeyboardInterrupt:
pass
我尝试发送
Parsed_drawbox_1 reinit x=40
或
Parsed_drawbox_1 x 40
但仍然从脚本中得到 Received reply:[b'38 Function not implemented']
。
当我在 ffmpeg 上设置详细时,我可以看到
[Parsed_zmq_0 @ 0x5594e2d3b0] Processing command #8 target:Parsed_drawbox_1 command:reinit arg:w=40
[Parsed_zmq_0 @ 0x5594e2d3b0] Sending command reply for command #8:
38 Function not implemented
有没有人知道是什么导致了它,或者如何更好地调试它?
谢谢
感谢@Gyran,我得以解决它。
我的 FFmpeg 版本是 4.2.2,所以我更新到 4.3.1。
命令应该只是例如
Parsed_drawbox_1 x 300
我正在尝试动态控制由 ffmpeg 公开的 rtsp 流上框的大小和位置。我找到了一个基于 zmq 的潜在解决方案。我已经用 zmq 支持重新编译了 ffmpeg,并使用命令 运行 流
ffmpeg -re -rtsp_transport tcp -stimeout 1000000 -i "rtsp://<STREAM_ADDR>" -pix_fmt bgra -filter_complex zmq,drawbox=x=10:y=10:w=50:h=50:c=red -f fbdev /dev/fb0
然后我尝试使用来自 ffmpeg 回购工具的 python3 脚本发送更新(我修改它以调整 python3)
import sys, zmq, cmd
class LavfiCmd(cmd.Cmd):
prompt = 'lavfi> '
def __init__(self, bind_address):
context = zmq.Context()
self.requester = context.socket(zmq.REQ)
self.requester.connect(bind_address)
cmd.Cmd.__init__(self)
def onecmd(self, cmd):
if cmd == 'EOF':
sys.exit(0)
print('Sending command:[%s]' % cmd)
self.requester.send_string(cmd)
message = self.requester.recv()
print('Received reply:[%s]' % message)
try:
bind_address = sys.argv[1] if len(sys.argv) > 1 else "tcp://localhost:1235"
LavfiCmd(bind_address).cmdloop('FFmpeg libavfilter interactive shell')
except KeyboardInterrupt:
pass
我尝试发送
Parsed_drawbox_1 reinit x=40
或
Parsed_drawbox_1 x 40
但仍然从脚本中得到 Received reply:[b'38 Function not implemented']
。
当我在 ffmpeg 上设置详细时,我可以看到
[Parsed_zmq_0 @ 0x5594e2d3b0] Processing command #8 target:Parsed_drawbox_1 command:reinit arg:w=40
[Parsed_zmq_0 @ 0x5594e2d3b0] Sending command reply for command #8:
38 Function not implemented
有没有人知道是什么导致了它,或者如何更好地调试它?
谢谢
感谢@Gyran,我得以解决它。
我的 FFmpeg 版本是 4.2.2,所以我更新到 4.3.1。
命令应该只是例如
Parsed_drawbox_1 x 300