Вам сначала нужно правильно настроить ALSA, загрузка модуля SND_ALOOP и используя его именованное устройство в плагине MDEV. Вы будете одновременно выводить аудио приложения через устройство с циркой и другое устройство по вашему выбору.
# ~/.asoundrc
pcm.!default {
type plug
slave.pcm mdev
route_policy duplicate
}
pcm.mdev {
type multi
slaves.a.pcm "hw:Loopback,0,0"
slaves.a.channels 2
slaves.b.pcm "hw:0,0"
slaves.b.channels 2
bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
bindings.2.slave b
bindings.2.channel 0
bindings.3.slave b
bindings.3.channel 1
}
pcm.loopback {
type hw
card Loopback
device 1
subdevice 0
}
pcm.mic {
type hw
card 1
device 0
}
FFMPEG может объединить несколько аудиопотоков с использованием фильтра Amerge. Вы предоставите это с исходным исходным контуром, и вы можете предоставить дополнительные входы. Этот пример включает в себя микрофон. Этот скрипт установлен для потоковой передачи в TwitchTV.
#!/bin/bash
FPS="30"
QUAL="faster"
GOP="60"
GOPMIN="30"
CBR="1500k"
ABR="96k"
SIZE="960x540"
OUTPUT=""rtmp://live-jfk.twitch.tv/app/${STREAM_KEY}"
function GetWindowPos() {
echo $(xwininfo | grep 'Absolute' | awk '{ORS=" "; print $4;}' | awk '{print ":0.0+"$1","$2"+draw_mouse=0";}')
}
function GetWindowSize() {
echo $(xwininfo | grep 'Width\|Height' | awk '{ORS=" "; print $2;}' | awk '{print $1"x"$2;}')
}
ffmpeg \
-f alsa -i mic \
-f alsa -i loopback \
-f x11grab -s $(GetWindowSize) -i $(GetWindowPos) \
-acodec aac -ab "$ABR" -strict -2 \
-vcodec libx264 -preset "$QUAL" \
-g "$GOP" -keyint_min "$GOPMIN" \
-b:v "$CBR" -minrate "$CBR" -maxrate "$CBR" -bufsize "$CBR" \
-filter_complex "[2:0]format=pix_fmts=yuv420p[vstream];[0:0][1:0]amerge=inputs=2[astream]" \
-flags:v +global_header -flags:a +global_header \
-r "$FPS" -s "$SIZE" \
-map "[vstream]" -map "[astream]" \
-f flv "$OUTPUT"
Это будет более порядок проще в использовании Pulseaudio, но я часто испытываю задержку с использованием источников монитора, что ужасно для прямой трансляции. Если вы свободны задержкой на Pulsaudio, вы можете просто выключить устройства ALSA для двух импульсных входов.
-f alsa -i mic \
-f alsa -i loopback \
Это изменится на:
-f alsa -i pulse \
-f alsa -i pulse \
, то вы установили бы входы в Pavucontrol.
mhahn сказал, что была ошибка в Yocto sshd, убивающая все текущие процессы cgroup при выходе из ssh, которая имеет простое исправление (просто еще не добралась до сборки Edison): poky - Poky Build Tool и Metadata т.е. вкратце:
echo "KillMode=process" >> /lib/systemd/system/sshd@.service
https://communities.intel.com/thread/57402?start=15&tstart=0