【问题标题】:FFmpeg drawbox and ZMQ b'38 Function not implemented'FFmpeg drawbox 和 ZMQ b'38 功能未实现'
【发布时间】:2023-03-13 16:05:01
【问题描述】:

我正在尝试动态控制 rtsp 流上的框的大小和位置,由 ffmpeg 公开。我找到了一个基于 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 repo 工具中使用 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

有谁知道是什么原因造成的,或者如何更好地调试它?

谢谢

【问题讨论】:

  • 看来FFmpeg 不知道这个命令Parsed_drawbox_1 - 也许你必须用另一个模块重新编译,或者它可能必须是不同的命令。你在哪里找到Parsed_drawbox_1?你有文档链接吗?提出问题,而不是在 cmets 中。
  • ffmpeg 版本必须 >= 4.3
  • 谢谢@Gyan。那是个问题

标签: python ffmpeg stream zeromq


【解决方案1】:

感谢@Gyran,我能够解决它。

我的 FFmpeg 版本是 4.2.2,所以我将其更新为 4.3.1。

命令应该只是例如

Parsed_drawbox_1 x 300

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 2013-01-13
    • 2013-07-24
    • 1970-01-01
    • 2013-06-24
    • 2020-08-17
    • 2021-12-12
    • 2021-04-28
    • 1970-01-01
    相关资源
    最近更新 更多