Alsa Pulse Audio не может открыть импульс аудиоустройства (нет такого файла или каталога): Ошибка ввода / вывода

Я пытаюсь передать мой Gnome Desktop, установленный на моем сервере OpenVZ VPS, и я не пытаюсь запустить его из SSH, но терминал внутри рабочего стола GNOME,

Я знаю, что у него, вероятно, нет звуковой карты, но это не то, что я пытаюсь воспроизвести звук, я просто хочу перенаправить его в поток.

Внутри моего регулятора громкости PulseAudio контроль громкости

Вот как это выглядит, когда я пытаюсь передать его. FFmpeg

Больше вещей я попробовал больше ошибок, которые произошли здесь больше ошибок об alsa, звуковых картах

Вот когда я запускаю pacmd list-source-outputs

 [removed@removed ~]$ pacmd list-source-outputs Welcome to PulseAudio! Use "help" for usage information. >>> 2 source outputs(s) available. index: 0 driver: <protocol-native.c> flags: DONT_MOVE state: RUNNING source: 0 <auto_null.monitor> current latency: 3.08 ms requested latency: 20.00 ms sample spec: float32le 1ch 25Hz channel map: mono Mono resample method: peaks owner module: 6 client: 4 <PulseAudio Volume Control> properties: media.name = "Peak detect" application.name = "PulseAudio Volume Control" native-protocol.peer = "UNIX socket client" native-protocol.version = "16" application.id = "org.PulseAudio.pavucontrol" application.icon_name = "audio-card" application.version = "0.9.10" application.process.id = "997" application.process.user = "removed_for_stackexchange(wasn't root)" application.process.host = "removed_for_stackexchange" application.process.binary = "pavucontrol" window.x11.display = ":1.0" application.language = "en_US.UTF-8" application.process.machine_id = "27be3273f5d5332051ccdc3100000002" application.process.session_id = "27be3273f5d5332051ccdc3100000002-1394085585.776225-694791372" module-stream-restore.id = "source-output-by-application-id:org.PulseAudio.pavucontrol" index: 1 driver: <protocol-native.c> flags: DONT_MOVE state: RUNNING source: 0 <auto_null.monitor> current latency: 3.11 ms requested latency: 20.00 ms sample spec: float32le 1ch 25Hz channel map: mono Mono resample method: peaks owner module: 6 client: 4 <PulseAudio Volume Control> direct on input: 2 properties: media.name = "Peak detect" application.name = "PulseAudio Volume Control" native-protocol.peer = "UNIX socket client" native-protocol.version = "16" application.id = "org.PulseAudio.pavucontrol" application.icon_name = "audio-card" application.version = "0.9.10" application.process.id = "997" application.process.user = "removed_for_stackexchange(wasn't root)" application.process.host = "removed_for_stackexchange" application.process.binary = "pavucontrol" window.x11.display = ":1.0" application.language = "en_US.UTF-8" application.process.machine_id = "27be3273f5d5332051ccdc3100000002" application.process.session_id = "27be3273f5d5332051ccdc3100000002-1394085585.776225-694791372" module-stream-restore.id = "source-output-by-application-id:org.PulseAudio.pavucontrol" 

Дополнительная информация о раковине, которую я использую

 [removed@removed ~]$ pacmd list-sinks Welcome to PulseAudio! Use "help" for usage information. >>> 1 sink(s) available. * index: 0 name: <auto_null> driver: <module-null-sink.c> flags: DECIBEL_VOLUME LATENCY FLAT_VOLUME DYNAMIC_LATENCY state: RUNNING suspend cause: priority: 1000 volume: 0: 100% 1: 100% 0: 0.00 dB 1: 0.00 dB balance 0.00 base volume: 100% 0.00 dB volume steps: 65537 muted: no current latency: 3.49 ms max request: 3 KiB max rewind: 3 KiB monitor source: 0 sample spec: s16le 2ch 44100Hz channel map: front-left,front-right Stereo used by: 1 linked by: 3 configured latency: 20.00 ms; range is 0.50 .. 10000.00 ms module: 9 properties: device.description = "Dummy Output" device.class = "abstract" device.icon_name = "audio-card" 

3 Solutions collect form web for “Alsa Pulse Audio не может открыть импульс аудиоустройства (нет такого файла или каталога): Ошибка ввода / вывода”

(надеюсь) УЛУЧШЕННЫЙ КОД НА НОМЕРЕ

Читая сценарий, предоставленный в вашем собственном ответе, я сделал следующие выводы о вашем решении. Пожалуйста, поправьте меня на любые / все ошибки, которые я мог бы сделать.

Вы добавляете спецификацию xwininfo $GAME_WINDOW в дамп файла tmp после задания геометрии $GAME_WINDOW через wmctl . Перед началом создания дампа вы эффективно обрезаете свой файл tmp в 0-байтах с помощью rm -f который предположительно встречается только один раз за сеанс либо потому, что поток специфичен для сеанса, либо для того, чтобы файл tmp становился слишком большим, хотя, опять же, я предполагая оба. Я основываю вышеуказанные выводы на этих трех строках:

 > rm -f twitch_tmp 2> /dev/null > wmctrl -r "$GAME_WINDOW" -e 0, 411,51,160,144 > xwininfo -name "$GAME_WINDOW" >> twitch_tmp 

Хотя я не знаком с wmctl или xwininfo я знаю, что они являются обычными утилитами xorg для автоматизации различных видов поведения X- Window. Я предполагаю, что вы передаете этот набор данных только для того, чтобы не отставать от любых изменений, поскольку они могут возникать, поэтому ffmpeg может делать правильные вещи с помощью своего транскода, а не фактически перекачивать фактические данные источника изображения / звука через следующие две переменные среды, поскольку я очень серьезно сомневаюсь, что последнее поведение будет работать более чем на несколько секунд, если вообще:

 > TOPXY=$(cat twitch_tmp | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' ) > INRES=$(cat twitch_tmp | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+') 

Вот ты:

  • Откройте две $TOPXY $(command substitution) , по одному для $TOPXY и $INRES .

Для $TOPXY вы:

  • Con cat enate ваш tmp файл с stdin и анонимно |pipe вывести результаты в stdin grep , который затем …
  • oEe Опускает любую строку и любую часть любой строки, не oEe ее, которая не содержит строку:
    • « Уголки: », а затем …
    • хотя бы один символ пробела, затем …
    • знак \+ плюс буква, затем …
    • на + наименьшей цифре [0-9]
    • другой \+ буквальный плюс …
    • и, наконец, по крайней мере + одна цифра [0-9]
  • Результаты анонимно |piped в другой экземпляр grep который впоследствии -oEe опускает все до вашей первой записи [0-9] затем анонимно |pipe свои результаты на …
  • sed который tr передает все литеральные \+ плюсы, которые он получает , запятые и сбрасывает на его stdout который …
  • наконец, захвачен и сохранен в $TOPXY помощью присваивания переменной $(command substituted) $TOPXY .

Процесс для $INRES выглядит примерно так же, если он немного менее сложный.

Наиболее примечательным для меня является то, что весь файл tmp содержит не менее двух раз для каждого вызова, не говоря уже обо всех |pipes . Наверное, есть много способов сделать это, но я не могу себе представить, что это будет среди них.

После этого вы вызываете ffmpeg ссылаясь на две приведенные выше переменные и различные другие параметры, включая другие переменные среды, которые вы также указали:

 ffmpeg -f x11grab -s "$INRES" -r "$FPS" -i $DISPLAY+$TOPXY \ -f pulse -i default \ -vcodec libx264 -preset $PRESET -crf 30 -x264opts keyint=50:min-keyint=20 -s $INRES \ -acodec libmp3lame -ab $AUDIO_BITRATE -ar $AUDIO_RATE_HZ \ -threads 0 -pix_fmt yuv420p \ -f flv "rtmp://$SERVER.twitch.tv/app/$STREAM_KEY" 

ВЕРОЯТНО БОЛЬШЕ ПРЯМОЙ

В следующем случае нет tmp файлов, один |pipe , вызывает только один вызов sed и одну подзаголовку подзаголовки для анализа ваших настроек геометрии и содержится в одной функции. Все переменные окружения определены here-documents переданные по потоку в его stdin и, следовательно, эффективно локально ограничены. Они также определяются с помощью parameter-substitution и поэтому настраиваются. Например, чтобы изменить значение $FPS для одного вызова, вам нужно только:

 % FPS=28 desk_stream 

Тем не менее, я думаю, что vlc сделает намного лучший вариант.

 desk_stream() { sed -rn '\ /.*((Corners:|geometry)\s*\+*([x|+|0-9]*\+)).*/{\ s//\3/;\ /X/s/.*/\ INRES="&";/p;\ s/(.*)\+(.*)\+$/\ DISPLAY='"${DISPLAY}"'"+\1,\2,";/p;\ };$a\. 0<&3 /dev/stdin\n' | . /dev/stdin } <<FFOPTS 3<<-\FFCMD ${FPS="15"} # target FPS ${PRESET="ultrafast"} # one of the many FFMPEG preset on (k)ubuntu found in /usr/share/ffmpeg ${THREADS="0"} #0 autostarts threads based on cpu cores. ${AUDIO_BITRATE="1k"} #Audio bitrate to 96k ${AUDIO_RATE_HZ ="44100"} #Audio rate 44100 hz ${GAME_WINDOW="MYGAMETEST"} ${STREAM_KEY=live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx} ${SERVER="live-jfk"} # NY server $(wmctrl -r "$GAME_WINDOW" -e 0, 411,51,160,144 &&\ xwininfo -name "$GAME_WINDOW") FFOPTS ffmpeg -f x11grab -s "$INRES" -r "$FPS" -i $DISPLAY \ -f pulse -i default \ -vcodec libx264 -preset $PRESET -crf 30 -x264opts keyint=50:min-keyint=20 -s $INRES \ -acodec libmp3lame -ab $AUDIO_BITRATE -ar $AUDIO_RATE_HZ \ -threads 0 -pix_fmt yuv420p \ -f flv "rtmp://$SERVER.twitch.tv/app/$STREAM_KEY" FFCMD 

Таким образом, вы определенно установили pulseaudio, но вам явно не хватает драйверов эмуляции ALSA pulseaudio. Pulseaudio взаимодействует с клиентскими приложениями по-разному, но обычным является то, что приложения обращаются к ALSA и pulseaudio для перехвата. Alsamixer evern работает таким образом в правильно настроенной системе. Вот очень полезная страница для понимания того, как работает pulseaudio. В частности, это говорит об модуле-alsa-sink :

Вам (почти) никогда не придется загружать этот модуль вручную.

Возможно, вас заинтересовал бы модуль пара строк, module-pipe- {sink, source} :

Предоставляет простой тест {приемник, источник}, который (пишет, читает) аудиоданные {to, from} FIFO …

С этой целью, если у вас есть VLC или вы можете получить его, вы можете попробовать с ним потоковое вещание:

 pacmd list-source-outputs 

должен содержать выходной адрес, что-то вроде того, что я вставил ниже для вашего фиктивного источника:

 cvlc pulse://alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor \ --sout '#transcode{acodec=mpga,ab=128,channels=2}:\ standard{access=http,dst=0.0.0.0:8080/pc.mp3}' & 

О, и у вас также может быть некоторый интерес к пакату, и вы, вероятно, уже получили его. Это единственный исполняемый файл, с которым связаны как parec, так и paplay .

Немного больше о Pulse / ALSA (хотя это документация очень хороша в этом):

Pulseaudio пытается имитировать ALSA для любого приложения, которое еще не обновлено для его взаимодействия. В принципе, теория гласит, что если приложение не оборудовано, чтобы делать это с импульсом, импульс будет посредником ALSA в любом случае через интерфейс модуля-alsa-sink plugin, о котором я упоминал ранее. Фактически, то же самое верно для OSS и Esound и их соответствующих модулей, если они потребуются.

Но, может быть, вы слишком задумываетесь об этом – простейшая потоковая передача звука может быть выполнена с помощью mkfifo или даже просто кошки, если вы захотите. В зависимости от ваших требований к пропускной способности и латентности netcat может быть очень полезен здесь. Вы также можете посмотреть на Sox – он предлагает интерфейс, похожий на pacat.

Каково ваше распределение linux? Я понимаю его в контейнере, но, вероятно, вы указали, что обновили все соответствующие пакеты, особенно если импульс не работает. Попробуй это:

 pulseaudio --start 

Если он работает, попробуйте это, возможно, лучше намекнуть на то, что может быть вашим источником:

 pacmd list-source-outputs | grep 'source:' 

Решив проблему самостоятельно, это ниже работает идеально даже без звуковой карты на вашем VPS, она передает потоки как аудио, так и видео.

 FPS="15" # target FPS PRESET="ultrafast" # one of the many FFMPEG preset on (k)ubuntu found in /usr/share/ffmpeg THREADS="0" #0 autostarts threads based on cpu cores. AUDIO_BITRATE="1k" #Audio bitrate to 96k AUDIO_RATE_HZ ="44100" #Audio rate 44100 hz GAME_WINDOW="MYGAMETEST" STREAM_KEY=live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx SERVER="live-jfk" # NY server rm -f twitch_tmp 2> /dev/null wmctrl -r "$GAME_WINDOW" -e 0, 411,51,160,144 xwininfo -name "$GAME_WINDOW" >> twitch_tmp TOPXY=$(cat twitch_tmp | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' ) INRES=$(cat twitch_tmp | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+') ffmpeg -f x11grab -s "$INRES" -r "$FPS" -i $DISPLAY+$TOPXY \ -f pulse -i default \ -vcodec libx264 -preset $PRESET -crf 30 -x264opts keyint=50:min-keyint=20 -s $INRES \ -acodec libmp3lame -ab $AUDIO_BITRATE -ar $AUDIO_RATE_HZ \ -threads 0 -pix_fmt yuv420p \ -f flv "rtmp://$SERVER.twitch.tv/app/$STREAM_KEY" 
  • Как уменьшить объем фонового музыкального потока при воспроизведении другого источника звука?
  • Как предотвратить Pulseaudio при сбое при запуске виртуальной машины из VirtualBox?
  • Сервер PulseAudio на Android
  • Устранение неполадок обнаружения гнезд в Pulseaudio
  • Есть ли значок микшера gnome-shell, который опирается на alsa, а не pulsudio?
  • как автоподключить наушники bluetooth в Fedora 25?
  • воспроизведение аудио не начинается с начала
  • Создание комбинированного источника в pulseaudio
  • После каждой перезагрузки громкоговорители имеют громкость 0
  • Сопряжение Bose QC 35 по Bluetooth на Fedora
  • pulseaudio-equizer не работает в Debian 9
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.