Как получить доступ к аудио JACK из контейнера Docker - PullRequest
0 голосов
/ 02 июля 2019

У меня есть мультимедийное приложение в контейнере Docker. Я хотел бы подключить его к моему аудио-серверу JACK, работающему в хост-системе. Как я могу это сделать?

Это моя текущая (и не работает) docker run команда:

    docker run \
        --rm \
        -i -t \
        -u $(id -u):$(id -g) \
        -v $(pwd):/home/app/build \
        -v $HOME:/home/app \
        -v /media:/media \
        -v /usr/local/lib64:/usr/local/lib64 \
        -v /tmp/.X11-unix:/tmp/.X11-unix \
        -v /etc/machine-id:/etc/machine-id \
        -v /run/user/$(id -u)/pulse:/run/user/$(id -u)/pulse \
        -v $HOME/.pulse:/home/app/.pulse \
        --env DISPLAY \
        --env HOME='/home/app' \
        --privileged \
        --group-add $(getent group audio | cut -d: -f3) \
        --name "app" \
        <image name> <parameters>

1 Ответ

0 голосов
/ 03 июля 2019

С это :

Совместное использование памяти Еще одним из используемых IPC является разделяемая память.Базовым классом для всей разделяемой памяти в системе JACK является JackShmMemAble.Объекты, которые должны идти в общую память, должны быть производными от этого базового класса.Реализация этого класса снова зависит от платформы.Для систем Linux используются API общей памяти System V.Совместно используемая память используется для различных целей, таких как уведомление клиентского потока RT о том, какой приоритет он должен установить для себя.Классы шаблонов JackShmReadWritePtr, JackShmReadWritePtr1 и JackShmReadPtr используются для доступа к разделяемой памяти.

Итак, я думаю, что вы должны связать mount /dev/shm с контейнером, как далее, тогда я предполагаю, что клиент в контейнере мог бы общатьсяс аудиосервером jack в хосте с общей памятью:

docker run \
    --rm \
    -i -t \
    -u $(id -u):$(id -g) \
    -v /dev/shm:/dev/shm \
    -v $(pwd):/home/app/build \
    -v $HOME:/home/app \
    -v /media:/media \
    -v /usr/local/lib64:/usr/local/lib64 \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v /etc/machine-id:/etc/machine-id \
    -v /run/user/$(id -u)/pulse:/run/user/$(id -u)/pulse \
    -v $HOME/.pulse:/home/app/.pulse \
    --env DISPLAY \
    --env HOME='/home/app' \
    --privileged \
    --group-add $(getent group audio | cut -d: -f3) \
    --name "app" \
    <image name> <parameters>
...