#! /bin/bash
# originaly from http://tinyurl.com/twitch-linux from taladan
# www.youtube.com/user/taladan
# gist created by brodul
INRES=`xwininfo -name "WoT Client" | awk '/geometry/ {print $2}' | sed -e 's/\+.*//g'`
#INRES="1280x800" # input resolution
#OUTRES="1280x720" # Output resolution
OUTRES="640x380" # Output resolution
#OUTRES="$INRES" # Output resolution
FPS="18" # target FPS
QUAL="fast" # one of the many FFMPEG preset on (k)ubuntu found in /usr/share/ffmpeg
# If you have low bandwidth, put the qual preset on 'fast' (upload bandwidth)
# If you have medium bandwitch put it on normal to medium
CORNER=`xwininfo -name "WoT Client" | awk '/Corners/ {print $2}' | sed -re 's/\+(.*)\+(.*)/+\1,\2/'`
echo "INRES: $INRES CORNER: $CORNER"
# Write your key in a file named .twitch_key in your home directory
STREAM_KEY=$(cat ~/.twitch_key) # This is your streamkey generated by jtv/twitch found at: http://www.justin.tv/broadcast/adv_other
URL="rtmp://live-ams.twitch.tv/app/"
#BITRATE=2048000
BITRATE=1024000
nice taskset -c 1,2,3 avconv \
-f x11grab -s $INRES -r "$FPS" -i :0.0"$CORNER" \
-f alsa -ac 2 -i pulse \
-vcodec libx264 -s $OUTRES -preset $QUAL \
-acodec libmp3lame -ar 44100 -threads 3 -qscale 3 -b $BITRATE -bufsize 512k \
-f flv "${URL}${STREAM_KEY}"
Основное изменение - это поиск окна WoT и определение его местоположения на экране.
С этим все ясно. Следующей проблемой было сделать так, чтобы можно было и говорить в микрофон и зрители стрима могли это слышать. После гугления был обнаружен хинт про module-loopback в pulse. Так я и сделал :)
pactl load-module module-loopback latency_msec=1 sink=alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo
Однако, с таким подходом, я слышу и себя, что делает для моего мозга ужасную обратную связь, которая мешает нормально говорить.
После вдумчивого чтения документации по модулям pulseaudio, меня осенило.
В pulse есть модуль null-sink, который ничего никуда не выводит. Так вот, достаточно его загрузить, выбрать как устройство, с которого будет идти запись в стрим (через pavucontrol, например).
Далее загружаем аж два module-loopback:
pactl load-module module-loopback latency_msec=1 sink=null
pactl load-module module-loopback latency_msec=1 sink=null
После чего в том же pavucontrol источником звука для этих (для этого надо включить отображение Virtual streams в Recording) мы выбираем 1) Monitor o НашаЗвуковаяПлата для захвата звука из приложения (в данном случае World Of Tanks и любые другие звуки), для второго loopback мы выбираем, собственно, саму звуковую плату (для захвата микрофона). И вуаля - мы слышим звук из игры, мы не слышим себя, зато зритель слышит всё!
Следующим шагом, видимо, будет запиливание автоматического выбора источников звука для loopback с помощью pactl, чтобы не нужно было ничего делать руками в pavucontrol, но я так спешил поделиться радостью, что пока не сделал этого.
Комментариев нет:
Отправить комментарий