从docker容器内部创建jack客户端

从docker容器内部创建jack客户端,docker,ffmpeg,docker-compose,jack,Docker,Ffmpeg,Docker Compose,Jack,我使用插孔在电脑中的多个声卡之间传送音频。 为了录制音频,我使用了一个非常方便的FFmpeg命令,该命令创建了一个可写的jack客户端: ffmpeg-f jack-i-strict-2-y。 到目前为止,这种方法效果很好 问题从这里开始: 我还有一个nginx docker,它记录我的数据并使其可用于流媒体。在docker中尝试使用相同的命令时,我遇到以下错误:“无法注册为JACK客户端” 我开始查看,发现FFmpeg命令从jackapi调用jack\u client\u open命令,但失败

我使用插孔在电脑中的多个声卡之间传送音频。 为了录制音频,我使用了一个非常方便的FFmpeg命令,该命令创建了一个可写的jack客户端:
ffmpeg-f jack-i-strict-2-y
。 到目前为止,这种方法效果很好

问题从这里开始:

我还有一个nginx docker,它记录我的数据并使其可用于流媒体。在docker中尝试使用相同的命令时,我遇到以下错误:
“无法注册为JACK客户端”

我开始查看,发现FFmpeg命令从jackapi调用
jack\u client\u open
命令,但失败了

似乎docker内部的FFmpeg请求与主机上运行的jackd服务器之间的连接存在某种问题

有没有简单的方法在两个[公开端口]之间创建连接

(我看到了一些解决方案,如,但在创建更复杂的服务器-客户机体系结构之前,我希望找到一个更优雅的解决方案)


谢谢你的帮助

我刚刚开始工作,我在docker运行命令中需要以下命令:

--volume=/dev/shm:/dev/shm:rw
--user=1000
因此,容器正在运行一个用户,该用户可以从我的主机用户帐户生成的jackd访问
/dev/shm
中的文件。如果jackd和容器都以root用户身份运行,则不需要这样做


您可以通过在容器中运行jack_simple_client来确认其工作,您应该会收到一声蜂鸣声。

我刚刚开始工作,我需要在docker运行命令中执行以下操作:

--volume=/dev/shm:/dev/shm:rw
--user=1000
因此,容器正在运行一个用户,该用户可以从我的主机用户帐户生成的jackd访问
/dev/shm
中的文件。如果jackd和容器都以root用户身份运行,则不需要这样做


您可以通过在容器中运行jack_simple_client来确认其工作,您应该会收到一声蜂鸣声。

如果可以使用Unix socket运行
jack
服务器并将其用于与
ffmpeg
通信,那么您可以将socket文件装载到容器中并使用该文件进行通信。您可以做的另一件事是在
主机
网络模式下使用docker,并在docker中使用主机IP进行通信。解决方案1:我深入研究了jack代码,发现所有套接字都位于/dev/shm中。我与docker共享了这个卷,并运行了FFmpeg命令,但它无法连接。你知道为什么吗?解决方案2:考虑使用ssh,但这有点不正确-如果您可以添加您正在执行的命令来运行容器,并在尝试将套接字装入容器时共享输出,这将非常有用。如果可以使用Unix套接字运行
jack
服务器,并使用它与
ffmpeg
进行通信,然后,您可以将套接字文件装载到容器中,并将其用于通信。您可以做的另一件事是在
主机
网络模式下使用docker,并在docker中使用主机IP进行通信。解决方案1:我深入研究了jack代码,发现所有套接字都位于/dev/shm中。我与docker共享了这个卷,并运行了FFmpeg命令,但它无法连接。你知道为什么吗?解决方案2:考虑使用ssh,但它有点不正确-如果您可以添加正在执行的命令来运行容器,并在尝试将套接字装入容器时共享输出,这将非常有用。