From c42aa40033fd9d16e1da51cccc56b6063d6eec6e Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Sat, 20 Nov 2021 20:17:07 -0500 Subject: Add custom IDs, streaming script --- playbook.md | 57 ++++++++++++++++----------- playbook.org | 75 ++++++++++++++++++++++++++++++++++++ playbook/stream-desktop-and-audio.sh | 1 + 3 files changed, 110 insertions(+), 23 deletions(-) create mode 100644 playbook/stream-desktop-and-audio.sh diff --git a/playbook.md b/playbook.md index 9a509c39..bcd3ab83 100644 --- a/playbook.md +++ b/playbook.md @@ -101,9 +101,9 @@ - Doesn’t really work for corwin because of some weird setting problem - STRT Streaming to YouTube -- [X] [Start streaming](#org0bb33b4) +- [X] [Start streaming](#start-streaming) - Ugh, need to figure out ffmpeg for streaming -- [ ] [Check in a speaker](#orgd6f46ac) +- [ ] [Check in a speaker](#check-in) - [ ] Try streaming the organizer room, HOST rehearses opening remarks - [X] Play a prerec with subtitles - [ ] Try switching to talk room and streaming pretend Q&A @@ -159,7 +159,7 @@ - Backchannel for easy viewing - + ### Start streaming :stream: @@ -184,11 +184,11 @@ ## Talk process - + ### Check in a speaker -Exception: [CHECK is unavailable](#orga2b0fce) +Exception: [CHECK is unavailable](#check-gone) - Speaker checks in on #emacsconf-org via IRC or via e-mail ~30m before - CHECK notes IRC nick for speaker. @@ -222,7 +222,7 @@ Exception: [CHECK is unavailable](#orga2b0fce) - CHECK updates ${upcoming} with link to the talk room and preferences for Q&A-. CHECK will also /msg the relevant information. - + ### Present talk @@ -234,24 +234,24 @@ Exception: [CHECK is unavailable](#orga2b0fce) - [? prerec] - STREAM and HOST switch to the organizer room in BBB. - STREAM switches to MPV scene in OBS and plays the video (with captions if available). - - Exception: [Last-minute prerecording submission](#org154e440) - - Exception: [Last-minute caption update](#orgc98e265) - - [CHECK publishes information](#org48b1df1) - - [HOST gets a head start on handling Q&A](#org5a65313) - - When prerec finishes, [STREAM joins Q&A](#org5a65313) + - Exception: [Last-minute prerecording submission](#last-minute-prerec) + - Exception: [Last-minute caption update](#last-minute-captions) + - [CHECK publishes information](#publish) + - [HOST gets a head start on handling Q&A](#questions) + - When prerec finishes, [STREAM joins Q&A](#questions) - [? live] - - Exception: [Speaker does not have a prerec and has not checked in](#orgf5536c3) + - Exception: [Speaker does not have a prerec and has not checked in](#really-missing) - HOST joins the BBB room and double-checks that recording is on - STREAM joins the BBB room and gives the go-ahead - CHECK notes that this is a live presentation and that the recording will be posted after the conference. - CHECK notes the time that the presentation started, recalculates schedule, and publishes it. - Speaker presents. - - Exception: [Technical issues during a live presentation](#org489104b) + - Exception: [Technical issues during a live presentation](#live-issues) - [? talk needs to be wrapped up] - HOST nudges speaker verbally. - + ### Publish information @@ -287,13 +287,13 @@ Exception: [CHECK is unavailable](#orga2b0fce) - wiki page for talk - + ### Handle Q&A Exceptions: -- [Speaker has not checked in](#org686cb61) +- [Speaker has not checked in](#missing) - [? live] - HOST joins the BBB room @@ -324,7 +324,7 @@ Exceptions: want to be notified, or subscribe to the emacsconf-? mailing list to get the announcement. Please feel free to continue discussing the talk on IRC or the pad. -- [Present next talk](#org6aeec48) +- [Present next talk](#present) ## Break time @@ -344,7 +344,7 @@ Exceptions: ## In case of… - + ### Last-minute prerecording submission @@ -352,7 +352,7 @@ Exceptions: - CHECK will notify STREAM with the scp command and the mpv command so that STREAM can choose. - + ### Last-minute caption update @@ -361,7 +361,7 @@ Exceptions: - STREAM uses the provided commands to download the VTT file and load it into MPV with `--sub-file` - + ### Speaker has not checked in @@ -372,7 +372,7 @@ Exceptions: - Can play next prerec a few minutes early - + ### Speaker does not have a prerec and has not checked in @@ -414,6 +414,17 @@ Exceptions: - HOST sends ${alternate-url} to IRC: Alternate stream for ${title}: ${alternate-url} - ALTERNATE notifies #emacsconf-org when the stream is done. - CHECK updates ${stream-status} to note that the alternate stream is finished. + + FFMPEG process for sending the desktop and audio to the $CONFALT mountpoint on Linux with X11 and Alsa: + + 1. Set the CONFALT environment variable to icecast://user:password@live0.emacsconf.org:8000/alt.webm + 2. Install pavucontrol if you don't have it already. + 3. Start the following command: + + while 1; do ffmpeg -reconnect_at_eof 1 -reconnect_streamed 1 -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done + 4. Use pavucontrol to set the recording source for the ffmpeg + command to be the audio monitor, so you get system output as + well. ### Pad malfunction or mess-up @@ -435,7 +446,7 @@ Exceptions: - HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban - + ### CHECK is unavailable @@ -452,7 +463,7 @@ Exceptions: - Either STREAM or CHECK does hosting - + ### Technical issues during a live presentation diff --git a/playbook.org b/playbook.org index 1083a52e..49281f95 100644 --- a/playbook.org +++ b/playbook.org @@ -81,6 +81,9 @@ - Backchannel for easy viewing *** Start streaming :stream: +:PROPERTIES: +:CUSTOM_ID: start-streaming +:END: - HOST: Display getting-ready message - STREAM: Set up BBB view in organizer room to have HOST's webcam maximized @@ -103,6 +106,9 @@ ** Talk process *** Check in a speaker +:PROPERTIES: +:CUSTOM_ID: check-in +:END: Exception: [[*CHECK is unavailable][CHECK is unavailable]] @@ -139,6 +145,9 @@ Exception: [[*CHECK is unavailable][CHECK is unavailable]] *** Present talk +:PROPERTIES: +:CUSTOM_ID: present +:END: - CHECK marks previous talk as done and notes the time finished: - ${conf} @@ -165,6 +174,9 @@ Exception: [[*CHECK is unavailable][CHECK is unavailable]] - HOST nudges speaker verbally. *** Publish information +:PROPERTIES: +:CUSTOM_ID: publish +:END: - CHECK updates the schedule in: - ${conf} @@ -199,6 +211,9 @@ ${description} - wiki page for talk *** Handle Q&A +:PROPERTIES: +:CUSTOM_ID: questions +:END: Exceptions: - [[*Speaker has not checked in][Speaker has not checked in]] @@ -235,12 +250,18 @@ Exceptions: - [[*Present talk][Present next talk]] ** Break time +:PROPERTIES: +:CUSTOM_ID: break +:END: - CHECK stops and restarts the Toobnix restreaming process, and re-checks the stream - CHECK uses =conf-upcoming-add-subtree= to add the afternoon talks to upcoming.org - HOST doublechecks network transfer limit and server health ** End of stream +:PROPERTIES: +:CUSTOM_ID: end +:END: - CHECK stops ffmpeg process for Youtube - CHECK stops ffmpeg process for main-480p @@ -249,23 +270,35 @@ Exceptions: ** In case of... *** Last-minute prerecording submission +:PROPERTIES: +:CUSTOM_ID: last-minute-prerec +:END: - CHECK will copy it from the FTP upload server to ${protected} and name it appropriately. - CHECK will notify STREAM with the scp command and the mpv command so that STREAM can choose. *** Last-minute caption update +:PROPERTIES: +:CUSTOM_ID: last-minute-captions +:END: - CHECK uploads the --main.vtt file to ${protected} - CHECK notifies STREAM via ${upcoming} - STREAM uses the provided commands to download the VTT file and load it into MPV with =--sub-file= *** Speaker has not checked in +:PROPERTIES: +:CUSTOM_ID: missing +:END: - Let the previous talk run a little longer for Q&A; end at least in time for the prerec - After the previous Q&A wraps up, play the prerec - [? still not around after prerec finishes] - HOST: Speaker might be having some difficulty connecting, but we'll collect your questions on the pad and send them afterwards. - Can play next prerec a few minutes early *** Speaker does not have a prerec and has not checked in +:PROPERTIES: +:CUSTOM_ID: really-missing +:END: - Let the previous talk do live Q&A/demo if ready - Close to the time of the missing talk: - See if any of the previous speakers want to be set up for an impromptu talk/extension in a BBB room, just in case @@ -285,6 +318,9 @@ Exceptions: accept a prerecording afterwards, then include it on the site and in post-conference communication *** Alternate stream volunteer wants to stream (nice to have, at risk) +:PROPERTIES: +:CUSTOM_ID: alternate +:END: - CHECK gives ALTERNATE the BBB room URL for the talk they are interested in - ALTERNATE starts streaming to assigned end point - CHECK confirms stream @@ -295,24 +331,48 @@ Exceptions: - HOST sends ${alternate-url} to IRC: Alternate stream for ${title}: ${alternate-url} - ALTERNATE notifies #emacsconf-org when the stream is done. - CHECK updates ${stream-status} to note that the alternate stream is finished. + + FFMPEG process for sending the desktop and audio to the $CONFALT mountpoint on Linux with X11 and Alsa: + + 1. Set the CONFALT environment variable to icecast://user:password@live0.emacsconf.org:8000/alt.webm + 2. Install pavucontrol if you don't have it already. + 3. Start the following command: + #+begin_src sh :eval no :tangle playbook/stream-desktop-and-audio.sh + while 1; do ffmpeg -reconnect_at_eof 1 -reconnect_streamed 1 -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done + #+end_src + 4. Use pavucontrol to set the recording source for the ffmpeg + command to be the audio monitor, so you get system output as + well. *** Pad malfunction or mess-up +:PROPERTIES: +:CUSTOM_ID: pad-broken +:END: - PAD resets the pad using https://etherpad.wikimedia.org/p/emacsconf-2021/timeslider - [? still not recovered] - PAD reimports the pad from backup *** CRDT malfunctions +:PROPERTIES: +:CUSTOM_ID: crdt-broken +:END: - HOST notifies CHECK and tries reconnecting - [? still doesn't work] - Switch to backup Etherpad *** Conduct guidelines issue +:PROPERTIES: +:CUSTOM_ID: conduct +:END: - HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban *** CHECK is unavailable +:PROPERTIES: +:CUSTOM_ID: check-gone +:END: - HOST does check-ins - HOST refers to conf.org for Q&A preference etc. @@ -322,10 +382,16 @@ Exceptions: - Updating schedule/wiki on the fly *** HOST is unavailable +:PROPERTIES: +:CUSTOM_ID: host-gone +:END: - Either STREAM or CHECK does hosting *** Technical issues during a live presentation +:PROPERTIES: +:CUSTOM_ID: live-issues +:END: - HOST tries to contact the speaker - [? back on track] @@ -338,6 +404,9 @@ Exceptions: be able to follow up after the conference *** Big technical issues with streaming +:PROPERTIES: +:CUSTOM_ID: stream-issues +:END: - HOST notifies #emacsconf and #emacsconf-org and pad - HOST updates the 2021.md wiki page @@ -349,6 +418,9 @@ Exceptions: - STREAM e-mails the mailing list *** live0 can't handle the load or is close to network transfer limit +:PROPERTIES: +:CUSTOM_ID: network +:END: - OR: - Redirect some viewers via asking in #emacsconf: @@ -358,6 +430,9 @@ Exceptions: - Add additional node to Linode account for shared transfer pool (TODO: doublecheck) * Before the conference +:PROPERTIES: +:CUSTOM_ID: before +:END: ** Help speakers with tech checks - Explain process - Test audio, webcam, screensharing, collaborative pad diff --git a/playbook/stream-desktop-and-audio.sh b/playbook/stream-desktop-and-audio.sh new file mode 100644 index 00000000..38f50025 --- /dev/null +++ b/playbook/stream-desktop-and-audio.sh @@ -0,0 +1 @@ + while 1; do ffmpeg -reconnect_at_eof 1 -reconnect_streamed 1 -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done -- cgit v1.2.3