# Table of Contents
- [Roles/values](#roles)
- [After the conference](#orgac70a06)
- [Update captions](#org1e43b2c)
- [Update](#org4cfcaec)
- [Thursday or Friday before the conference](#days-before)
- [On the day of the conference](#day-of)
- [Set up](#setup)
- [Arrange screens](#screens)
- [Start streaming](#start-streaming):stream:
- [Talk process](#talk)
- [Check in a speaker](#check-in)
- [Present talk](#present)
- [Publish information](#publish)
- [Handle Q&A](#questions)
- [Break time](#break)
- [End of stream](#end)
- [In case of…](#exceptions)
- [Last-minute prerecording submission](#last-minute-prerec)
- [Last-minute caption update](#last-minute-captions)
- [Speaker has not checked in](#missing)
- [Speaker does not have a prerec and has not checked in](#really-missing)
- [Speaker whose talk was reallocated shows up and has a prerec](#reallocated-prerec)
- [Speaker whose talk was reallocated shows up and wants to do it live](#reallocated-live)
- [Alternate stream volunteer wants to stream (nice to have, at risk)](#alternate)
- [Pad malfunction or mess-up](#pad-broken)
- [CRDT malfunctions](#crdt-broken)
- [Conduct guidelines issue](#conduct)
- [CHECK is unavailable](#check-gone)
- [HOST is unavailable](#host-gone)
- [Technical issues during a live presentation](#live-issues)
- [Big technical issues with streaming](#stream-issues)
- [live0 can't handle the load or is close to network transfer limit](#network)
- [Before the conference](#before)
- [Help speakers with tech checks](#tech-checks)
- [Experiment with setup to allow MPV / BBB sound isolation](#sound)
- [Compress video](#orgf31a1d7)
- [Check for video encoding issues](#org7482155)
# Roles/values
B |
|
bandali |
CHECK |
check-ins |
sachac |
HOST |
hosting, streaming, intros, reading, moving questions/answers around |
zaeph |
# After the conference
## Update captions
- Merge them into the video with `add-captions.sh`
#!/usr/bin/zsh
BASE="${1%.*}"
BASE="${BASE%--main}"
ffmpeg -y -i "$1" ${BASE}--main.vtt
if [ -f "${BASE}--normalized.webm" ]; then
ffmpeg -y -i "$1" -i "${BASE}--normalized.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
else
ffmpeg -y -i "$1" -i "${BASE}--compressed.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
fi
cp ${BASE}--main.vtt ${BASE}--chapters.vtt ~/vendor/emacsconf-wiki/2021/captions
scp "${BASE}--captioned.webm" "${BASE}--main.webm"
scp "${BASE}--main.webm" front:~/protected
scp "${BASE}--main.vtt" front:~/protected
scp "${BASE}--chapters.vtt" front:~/protected
ssh front 'cd protected; chmod ugo+r *'
- Update Toobnix and Youtube captions with `conf-video-share`.
- Update Toobnix and Youtube descriptions with chapters.
- Update ${conf-year}/${captions}/${slug}.md in the wiki. To make this from scratch, use `M-x conf-prepare-transcript-directives` from the talk heading in the conference Org file.
## Update
# Thursday or Friday before the conference
- STREAM: Download prerecorded videos from ${protected}
rsync -avzue ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
# On the day of the conference
## Set up
### Arrange screens
- CHECK:
- Share ${upcoming}, ${playbook}, and ${conf} via CRDT: `conf-crdt-connect-and-share`
- Current schedule, filenames/commands for playing, Q&A preference, IRC nick, pronunciation, intro notes, prerec duration, emergency contact information
- `conf-upcoming-add-subtree`
- Have #emacsconf-org, #emacsconf, #emacsconf-accessible, and #emacsconf-questions open
- Use `/opall` to get op privileges in all the channels
- Start backup process for pad
while true; do
curl https://etherpad.wikimedia.org/p/emacsconf-2021/export/html > emacsconf-$(date +"%Y%m%d-%H%M%S").html
sleep 15m
done
- Computer for alternate streaming:
- Open browser for joining BBB
- Open MPV for playing
- HOST:
- rsync the newest –main.webm from front: rsync -avze ssh front:/var/www/media.emacsconf.org/2021/protected/\*–main.webm .
- Check OBS scenes for sharing windows/tabs as a virtual camera:
- chat.emacsconf.org with #emacsconf
- Etherpad
- Schedule
- next talk page
- Clock with current time on screen: `watch TZ=America/Toronto date`
- Set up backchannel for easy viewing
- ${upcoming}
- \#emacsconf-org and #emacsconf channels
- (?) Join organizer room S
### Start streaming :stream:
- HOST: Display getting-ready message and start streaming to main.webm
- HOST: Confirm that the stream is live at
- B: Update ${status} to say that the stream is live
- CHECK: Start low-resolution stream, confirm at
Call this on live0 with $CONF480PASS as the first parameter. The Icecast configuration is on `live0` at =.
PASS=$1
while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
- CHECK: Start Youtube and Toobnix streams. Call this with $YOUTUBE1PASS, $YOUTUBE2PASS, or $TOOBNIX as the parameter
MOUNT=$1
while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
- CHECK: Verify YouTube and Toobnix streams and the CPU load on live0.
- CHECK: Set the YouTube and Toobnix streams to public.
- B: Verify with #emacsconf that the stream is active.
- CHECK: Play main stream on alternate laptop. Start alternate stream and verify. Update ${status}.
- CHECK: Announce on Twitter (@emacs, @emacsconf, @sachac) and in #emacs
EmacsConf 2021 starting now:
## Talk process
### Check in a speaker
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.
- CHECK confirms Q&A preference: live/IRC/Etherpad, preferred way of getting questions
- [? unknown] Thanks for checking in! How would you like to handle Q&A
today - live video, the collaborative Etherpad at
, or IRC (like
this)?
- [? IRC] Thanks for checking in! Feel free to keep an eye on
\#emacsconf for questions and discussion, and we'll copy things from
the pad to there. If the volume gets overwhelming, let us know and
we can forward questions to #emacsconf-questions for you. If you'd
like to try Q&A over live video or the collaborative pad instead, or
if you need help, please let us know.
- [? Etherpad] Thanks for checking in! The collaborative pad we'll be
using for questions is at
. We'll collect
questions from #emacsconf and put them there. If you'd like to jump
to your part of the document, you might be able to keep an eye on
questions. Please let us know if you need help, or if you want to
switch to live Q&A.
- [? live] Thanks for checking in! I'll send you some private messages
with instructions, so please check there. Let me know if you don't
get them.
- Private messages:
- (erc-message "PRIVMSG" (format "%s You can use this BBB room: %s . I'll join you there shortly to set up the room and do the last-minute tech check." nick room-url))
- (erc-message "PRIVMSG" (format "%s The collaborative pad we'll be using for questions is at %s . We'll collect questions from #emacsconf and put them there. If you'd like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you." nick conf-collaborative-pad))
- (erc-message "PRIVMSG" (format "%s Leo Vivier will join when it's time, and he will give you the go-ahead when it's time to present. See you in the BBB room!" nick))
- CHECK directs speaker to available room with `/checkin `
- Speaker joins talk room
- CHECK makes speaker presenter and moderator, does last-minute tech check
- Hello, thanks
- Speaker tries screen sharing and webcam (optional)
- check screen readability
- CHECK briefs speaker on process, including:
- live Q&A: reading questions themselves (can do in any order,
can skip; coach possible responses for awkward things) or asking HOST to read questions to them
- HOST can share the pad or IRC; speaker shares screen only if doing demo
- encouragement of webcam, although it's optional
- how HOST will join shortly before the prerec ends and then
give them the go-ahead
- closing any tabs watching the stream as their talk starts
(otherwise the audio is confusing)
- If the speaker will be giving a live presentation, CHECK
collects emergency contact information (in case of technical
issues) and shares it with HOST in the CRDT buffer
- Okay to do other things until the prerec ends
- CHECK updates ${upcoming} with link to the talk room and
preferences for Q&A-. CHECK will also /msg the relevant
information.
### Present talk
- CHECK announces the next talk on IRC and marks the previous talk as done. (`conf-announce`)
- PAD clears pad colours.
- [? prerec]
- HOST switches to MPV scene in OBS and plays the video (with captions if available).
- 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, HOST switches the OBS scene to show BBB.
- [? live]
- 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.
- CHECK-alternate joins the BBB room and pauses main MPV.
- HOST switches to OBS scene for BBB.
- Speaker presents.
- Exception: [Technical issues during a live presentation](#live-issues)
- [? talk needs to be wrapped up]
- HOST nudges speaker verbally.
### Publish information
- CHECK updates the schedule in:
- ${conf}
- ${upcoming}
- wiki
- CHECK publishes the video to media.emacsconf.org using `conf-publish-files`
- CHECK commits the wiki page and the captions for the talk.
- CHECK publishes the video on YouTube and ToobNix using `conf-video-share`.
- Update description:
This video is available under the terms of the
Creative Commons Attribution-ShareAlike 4.0 International (CC
BY-SA 4.0) license.
You can view it using free and open source software at
${url}
${description}
- Mark it as public.
- Add it to EmacsConf 2021 playlist.
- Update title and description.
- Mark it as public.
- Doublecheck subtitles
- Add it to the EmacsConf 2021 playlist.
- [? live sections]
- CHECK does a rough-cut of the recording from ${dump} to get the last X minutes or by time range. There's about a 1-2 minute delay.
Ex: `(kill-new (conf-dump-get "alt" "10:24" "10:30" "qa_"))`
- When there's an opportunity to do so:
- CHECK finetunes the rough-cut recording (trim start and end) and posts it to:
- media.emacsconf.org/2021
- wiki page for talk
### Handle Q&A
Exceptions:
- [Speaker has not checked in](#missing)
- [? live]
- CHECK-alternate joins the BBB room and pauses MPV.
- HOST joins the BBB room
- HOST starts recording in BBB or confirms that it's already recording
- HOST switches to the BBB scene in OBS.
- HOST describes how to ask questions.
- [? No questions yet]
- HOST thanks speaker, says nice things about talk, and asks a couple of prepared questions
- [? Awkward question]
- HOST can try rephrasing the question.
- HOST adds note to IRC/Etherpad that speakers can answer in any order, skip questions, answer afterwards, etc.
- [? Q&A needs to be wrapped up]
- HOST writes in Etherpad/IRC or nudges speaker verbally.
- CHECK notes the time that the live Q&A finished and switches back to the main stream on CHECK-alternate.
- [? IRC/pad]
- HOST switches to pad/chat OBS scene.
- HOST describes Q&A method and shows it on the screen.
- While there's buffer time before the next talk, HOST can read out
questions and answers, or transition to the next talk early
- HOST: It's time for the next talk, but if you want to keep
discussing the previous talk, please feel free to continue doing
so on IRC or the pad.
- [? speaker will answer after the conference]
- HOST switches to pad/chat OBS scene.
- HOST says the speaker is not available right now, but we'll
forward the questions to the speaker and we'll post the speaker's
answers on the wiki page. Leave your contact information if you
want to be notified, or subscribe to the emacsconf-discuss mailing
list to get the announcement. Please feel free to continue
discussing the talk on IRC or the pad.
- [Present next talk](#present)
## Break time
- CHECK marks the last talk as done. `conf-end-current-talk`
- 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
- CHECK removes live Q&A links
- CHECK stops ffmpeg process for Youtube
- CHECK stops ffmpeg process for Toobnix
- CHECK stops ffmpeg process for main-480p
- STREAM stops streaming
- B updates the status pages
- bandali figures out the downstream
## In case of…
### Last-minute prerecording submission
- 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
- 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
- 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
- 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
- HOST: The next speaker might be having some difficulty connecting. In the meantime, let's…
- OR:
- highlight ongoing discussions
- invite another speaker for an impromptu extension; mplsCorwin will keep a list of possible speakers who are still active
- replay a short prerec
- let mplsCorwin or zaeph fill in
### Speaker whose talk was reallocated shows up and has a prerec
- CHECK copies it to ${protected}
- Plan to play prerec at the end of the day, or in any gaps if a live talk falls through
### Speaker whose talk was reallocated shows up and wants to do it live
- See if there's enough time if buffers are shuffled back; if so, set up for a live presentation
- Check for alternate stream volunteers
- [? not enough time] Offer to set up a BBB room for recording or to
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)
- CHECK gives ALTERNATE the BBB room URL for the talk they are interested in
- ALTERNATE starts streaming to assigned end point
- CHECK confirms stream
- CHECK updates ${stream-status}
- CHECK notifies STREAM and HOST
- After prerec plays:
- HOST: This talk has an extended demo/Q&A. You can go to ${alternate-url} to watch it, and we'll post a recording afterwards.
- 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 true; do ffmpeg -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.
- OR:
- [? splitting audio] [Set up sinks for sound](#sound)
- [? same audio]
- Set up audio monitor as the input for FFMPEG
- MPV goes to MPV sink, browser goes to recording sink, FFMPEG takes in recording monitor
### Pad malfunction or mess-up
- PAD resets the pad using
- [? still not recovered]
- PAD reimports the pad from backup
### CRDT malfunctions
- HOST notifies CHECK and tries reconnecting
- [? still doesn't work]
- Switch to backup Etherpad
### Conduct guidelines issue
- HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban
### CHECK is unavailable
- HOST does check-ins
- HOST refers to conf.org for Q&A preference etc.
- STREAM checks conf.org for prerec filenames etc.
- Dropped goals:
- Publishing recordings ASAP
- Updating schedule/wiki on the fly
### HOST is unavailable
- STREAM joins the BBB room and streams directly from there (or streams the prerecs).
- STREAM will do the hosting.
### Technical issues during a live presentation
- HOST tries to contact the speaker
- [? back on track]
- [? can be squeezed into remaining time]: Continue
- [? need extra time]: CHECK fiddles with buffer of following talks in conf.org and updates schedule
- [? need too much extra time (ex: 10min)]: HOST acknowledges
technical issues and says we may be able to follow up after the
conference
- [? can't resume]: HOST acknowledges technical issues and says we may
be able to follow up after the conference
### Big technical issues with streaming
- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}.
- HOST updates the 2021.md wiki page
- CHECK publishes prerecordings
- media.emacsconf.org
- wiki
- Toobnix
- Peertube
- STREAM e-mails the mailing list
### live0 can't handle the load or is close to network transfer limit
- OR:
- Redirect some viewers via asking in #emacsconf:
- watch via main-480p
- watch via Toobnix (if we can get that working)
- Consider dropping the restream to Toobnix (lower audience?) or to Youtube
- Add additional node to Linode account for shared transfer pool (TODO: doublecheck)
# Before the conference
## Help speakers with tech checks
- Explain process
- Test audio, webcam, screensharing, collaborative pad
- Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
- Multi-monitor setups might not be handled well by BBB; share window instead of desktop
- Check if comfortable checking into IRC: chat.emacsconf.org/?join=emacsconf,emacsconf-org
- Get IRC nick, phone number for emergency contact, store in private wiki
- Try to record name pronunciation
- Encourage webcam for Q&A, although make it clear that it's totally optional
- Possible picture-in-picture approach to maximize screen real estate
## Experiment with setup to allow MPV / BBB sound isolation
Set MIC and OUTPUT appropriately.
MIC=alsa_input.usb-046d_0819_A68D6BE0-02.mono-fallback
OUTPUT=alsa_output.pci-0000_00_1b.0.analog-stereo
if [ "$1" == "-u" ]; then
pactl unload-module module-loopback
pactl unload-module module-null-sink
else
pacmd load-module module-null-sink sink_name=recording sink_properties=device.description=recording channels=2
pacmd load-module module-null-sink sink_name=mpv sink_properties=device.description=mpv
pacmd load-module module-loopback source=$MIC sink=recording
pacmd load-module module-loopback source=mpv.monitor sink=recording
pacmd load-module module-loopback source=recording.monitor sink=$OUTPUT
fi
You can probably then use `pavucontrol` (choose All Streams instead of
Applications on the Playback tab) or something like the following to
redirect the mpv output to the mpv sink.
pacmd list-sink-inputs # notice the ID for the process you want to redirect
pacmd move-sink-input 1 mpv
## Compress video
Usage: `compress-video.sh original-file output-file`:
Q=32
ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
We tried using q56 before, but it was a little too aggressive. Q=32 is the default and is probably a reasonable space vs. quality compromise.
## Check for video encoding issues
Sometimes the compression may get cut off. You can use
`compile-media-verify-video-frames` from
to check that videos have
enough frames for their expected duration