ฉันใช้ Mumble (ไคลเอนต์เดสก์ท็อป) + Murmur (เป็นเซิร์ฟเวอร์ LAN) + Plumble (ไคลเอนต์ Android / iOS) ผลลัพธ์นี้มีความหน่วงแฝงต่ำที่สุดที่ฉันเคยประสบความสำเร็จ (ฟังดูคล้ายลูปแบ็คปกติในทางทฤษฎี 7ms WiFi delay + 2x 10ms codec delay = 27 ms)
ชิ้นส่วนของ README (รุ่น 8c827fe)
ติดตั้ง Mumble (ไคลเอนต์เดสก์ท็อป) + Murmur (เซิร์ฟเวอร์) + Plumble (ไคลเอนต์ Android / iOS) ตั้งค่าทั้ง 3 โปรแกรมเพื่อใช้คุณภาพที่ดีที่สุดและเวลาแฝงน้อย ตั้งค่าไคลเอนต์มือถือให้สตรีมเสมอ
ในการติดตั้ง Mumble + Murmur บน Ubuntu คุณสามารถใช้:
sudo apt install mumble mumble-server
sudo systemctl stop mumble-server.service
sudo systemctl disable mumble-server.service
คัดลอกmic_over_mumble
ได้ทุกที่ - มันจะใช้~/.mic_over_Mumble
เป็นไดเรกทอรีการกำหนดค่า
mic_over_mumble
วิ่ง มันจะเริ่มเซิร์ฟเวอร์บน LAN จากนั้นเริ่ม Mumble (หากถูกถามชื่อเล่นให้ป้อนชื่ออื่นนอกเหนือจาก SuperUser) จากนั้นเชื่อมต่ออุปกรณ์มือถือของคุณกับเซิร์ฟเวอร์ LAN ด้วยตนเอง โปรดทราบว่า Mumble app มือถือมีปัญหาบางอย่าง
จากนั้นตั้งค่าโปรแกรมของคุณให้ใช้ "Monitor_of_Mumble" หรือ "VirtualMic" เป็นอุปกรณ์อินพุต (เชื่อมโยง) เช่นใน OBS:
สำเนาของmic_over_mumble
สคริปต์ (รอบ 8c827fe)
#!/bin/bash
set -euo pipefail
# PAID = PulseAudio ID
# ID = PID / process ID
function main () {
if [ ! -e ~/.mic_over_Mumble ]; then
mkdir ~/.mic_over_Mumble
fi
cd ~/.mic_over_Mumble
rm murmur.ini || true
echo "bonjour=true" >> murmur.ini
echo "bandwidth=130000" >> murmur.ini
if [ ! -e ./initdone ]; then
echo "You will need to configure Mumble client to use the lowest possible latency."
echo "We will start Mumble now. Please complete setup wizard and go to settings to increase quality and decrease latency."
echo "Also, mute your microphone (if you have one) in Mumble."
echo "Then close Mumble."
run_mumble_client_wizard
touch ./initdone
fi
echo "Starting Mumble server (murmurd)..."
run_mumble_server_bg
sleep 5
echo "Starting Mumble client..."
MUMBLE_CLIENT_ID=$(run_mumble_client_bg)
sleep 15
echo "Fetching PulseAudio configuration..."
MUMBLE_CLIENT_PAID=$(get_mumble_client_paid)
echo "Changing PulseAudio configuration..."
echo "Adding sink..."
SINK_MODULE_PAID=$(add_sink)
sleep 3
echo "Fetching current configuration to redirect Mumble..."
SINK_PAID=$(get_sink_paid)
pacmd move-sink-input "$MUMBLE_CLIENT_PAID" "$SINK_PAID"
echo "Adding a virtual microphone..."
SOURCE_MODULE_PAID=$(add_source)
echo "Done. Please use pavucontrol to ensure everything works."
echo "Press Return to shut down..."
read -n1 -s -r
echo "Shutting down..."
echo "Stopping Mumble client..."
kill -KILL "$MUMBLE_CLIENT_ID" || true
sleep 2
echo "Stopping Mumble server..."
# TODO: find a better way to kill murmurd
# (it forks, so we cannot use its PID)
pkill murmurd || true
echo "Restoring PulseAudio configuration..."
pactl unload-module "$SOURCE_MODULE_PAID"
pactl unload-module "$SINK_MODULE_PAID"
}
function run_mumble_client_wizard () {
mumble >/dev/null 2>&1
}
function run_mumble_client_bg () {
MUMBLE_URL="mumble://localhost"
mumble $MUMBLE_URL >/dev/null 2>&1 &
echo $!
}
function run_mumble_server_bg () {
murmurd -ini ./murmur.ini &
# echo $!
# TODO: here we can get murmur's PID
# (uncomment the line above)
}
function get_mumble_client_paid () {
pacmd list-sink-inputs |
grep -F -e "index: " -e "media.name = " |
cut_every_second_newline |
grep -F -e "Mumble" |
print_second_column
}
function add_sink () {
pactl load-module \
module-null-sink \
sink_name=Loopback_of_Mumble \
sink_properties=device.description=Loopback_of_Mumble
}
function add_source () {
pactl load-module \
module-virtual-source \
source_name=VirtualMic \
master=Loopback_of_Mumble.monitor \
source_properties=device.description=VirtualMic
}
function get_sink_paid () {
pacmd list-sinks |
grep -F -e "index: " -e "name: " |
cut_every_second_newline |
grep -F -e "Loopback" |
print_second_column
}
# https://serverfault.com/a/375098/449626
function cut_every_second_newline () {
awk 'ORS=NR%2?" ":"\n"'
}
function print_second_column () {
awk '{print $2}'
}
main
Please first load ALSA snd-aloop.
ดังนั้นฉันต้องทำ:sudo modprobe snd-aloop
แล้วฉันจะต้องเรียกใช้micclient-ubuntu-x86
เป็นราก (ใช้sudo
) แล้วมันก็ใช้ได้ใช่