# NEIC AHM 2022 hackathon: online teaching
###### tags: `NeIC`
See also: the AHM talk, related to this: https://hackmd.io/LQxs3v72QRi79MFtge3fng
Link to this document: https://hackmd.io/@coderefinery/ahm-hackathon-2022
## Time
- 24. - 27.2.
- Tue, Wed, and Thu but not everybody will have time all the time
- Monday: plenary sessions
## Attendees
(if you write your name here, you may get emails about the event)
- Johan Hellsvik
- Radovan Bast
- Enrico Glerean
- Simo Tuomisto
- Samantha Wittke (only monday + tuesday)
- Jarno Rantaharju
- Diana Iusan
-
## Goals
(since we can have different interests, each person write their goals here, and then we can assemble them into a plan)
- (rkdarst) Make the online streaming setup I have reusable by others. Allow others to test it out to refine it.
- (RB) Create a recording where we explain and demonstrate the setup. But not just using "slides" but where we visit the different rooms and roles together and explain it. A bit like a video explaining a manufacturing process.
- (JR) Simplify the streaming setup and installation to make it more accessible to people with less technical skills or fewer screens and other equipment.
- (EG) Reproducing the setup with other OSs (e.g. Aalto Windows)
- (JH) Get hands-on experience of operating the online streaming setup.
- (ST) Learning how the setup can be replicated.
- (SW) support your goals as best as I can :) where I think I can help: make current setup easily explainable to instructors without much technical details, "you need to be here and do your things, while this is how learners see/interact" (related to step 1 below)
## Existing references
- https://coderefinery.github.io/manuals/coderefinery-mooc/
- https://coderefinery.github.io/manuals/obs/
- https://coderefinery.github.io/manuals/online/
- https://github.com/coderefinery/obs-scenes
- https://github.com/GamesDoneQuick/agdq19-layouts
- [SGDQ2018 stream tech guide video](https://www.youtube.com/watch?v=8vw32I2L49Q)
## Brainstorming
- Fully cloud solution would be nice
- RD: if local solution, I think for local it can be simplified to:
- One dedicated streaming computer (not used by presenter), needs one external monitor only
- OBS tablet remote gives some control
- Getting it to either run somewhere as a "service", or a simple installation module, where its essentially a "pip install OBS_Setup; run OBS"
- If run on a server, maybe that part could be provided as a service
- (TP) Even though I asked for it, the disadvantage of it being a service would be that you need the "server infrastructure", so having a local option would probably be good
- (RD) Check OBS requiremnts, can it run headless in a cloud?
- (JR) If possible, I would prefer a self-contained setup running locally on a laptop / desktop
- (TP) or temporarily remotely on a work-place machine you have access to?
- (JR) I don't have one. A second machine is a requirement many users would not meet
- Not as a requirement, but as an option? Or run it "on a tablet" (if that's even possible requirement-wise)
- (RD) Difficult because of amount of encoding
- any possibility for running this with rather bad internet connection? Will everything fully break if internet connection is lost?
- (RD) Yes, need stable connection! Or pretty good
- Can we have some "minimium requirements" for the whole broadcast?
- e.g. mixer and and 2 instructors and a co-producer could be overkill for an audience of 20
- however, there is also the recording (people watching later)
- zoom recording alone may or may not be enough (we had trouble with privacy)
- (RD) IMO we can do better with privacy, and I think we should have a higher moral stanard than "put a disclaimer and it is legal"
- people may ask us later to be removed from video or voice so better not have them there at all
- we could optimize for 100 persons watching live and later once this is working and simple, one could try to scale the setup down to say 20 persons
- (DI) What is the minimal setup requirement in terms of hardware and software? Or just list what RD is using.
- Steps
- 1: as it is now but everybody understands it and we can easily explain it to instructors
- 2: richard's hardware but others can help with live production and post production
- 3: define what hardware is minimum viable
- 4: be able to use other hardware (cloud or actually other hardware)
- Presentation/recording on Thursday
Other things we can work on
- Decrease streaming latency?
- JavaScript frontend to scene selection
- Simplifying/scripting post-processing even further
- Scene layout and OBS profile repository
- Adding placeholder materials to scenes so that they will show scene layouts in a more visual way
## Notes on Richards presentation:
* OBS with different pre-setup scenes (title(=title-card), gallery (=iunstructor-gallery) ,local(=director-screen), remote (=screenshare), notes(=hackmd; window capture of browser window with cropped off top))
* scenes have different sources
* scenes are mostly vertical
* EG: I am trying to make the scene vertical on Windows but there is no option to specify custom WxH in pixels. I have to find where to set that... (off to another meeting now)
* scenes setup can be imported via json
* zoom is split into two windows that are captured separately (gallery and screenshare; from settings > general settings > dual monitors)
* reliable internet connection is important!
* for courses, no jitsi is used, only zoom and OBS
* [`OBS Tablet remote`](http://rkd.zgib.net/obs-tablet-remote/): also works on phone/tablet; static site for javascript web socket connection, can switch scenes (named same as in OBS), add more devices etc, also Audio is connected, if one is muted other is muted
* Web socket server settings: Host: k8.zgib.net, Port: 4445 (pw in zoom chat ;))
* use pencil in upper right to add devices, checkmark when finished
* this provides mic volume in main view
* to be improved (custom javascript):
* optimized use for teaching (everything already set up (default setup) when logging in)
* 5 scenes (title, gallery,local, remote, notes)
* notes (hackmd) is now screen capture of browser, needs to be scrolled down
* Hackmd and broadcaster screen could be removed from scenes
* other solutions were discussed (please fill in here)
* mute status
* control picture in picture view
* preview of what is currently shown
* scaling of picture in picture
* improved layout of scenes and other inputs
* [Midi controller](https://github.com/rkdarst/midictl)
* Scaling of scenes:
* Transform menu in OBS > Edit transform > To have the scale just right for stream, no matter the input size
* if screenshare is stopped, zoom gallery is visible
* better to always switch ('take over') screenshare to eg HackMD window rather than stopping screenshare
## "Broadcaster" (the person with OBS running):
* should not be teaching on the same computer (getting around this is possible but greatly increases complexity, we prefer a two-computer solution)
* cannot use zoom screenshare
* could have two computers (one with OBS other for everything else, ie interacting with HackMD, teaching, ...)
* setup could be on separate Computer with only OBS running which could be anywhere with good internet connection, broadcaster connects to it
## Broadcaster setup (how it should be in the end):
* open OBS
* import scenes
* make sure sources are set correctly (in scene properties, by window titles)
* setup scaling correctly (transform menu)
* open OBS tablet remote on computer/phone/tablet
* good to go!
### Steps to set up the broadcast computer
- install obs client
``` bash
sudo apt install obs-studio
```
- Download and install obs-websocket
- This download version 4.7.0, which is not the newest version, but is compatible with the obs-studio 25.0.7 that is available in the Ubuntu repositories
``` bash
wget https://github.com/obsproject/obs-websocket/releases/download/4.7.0/obs-websocket_4.7.0-1_amd64.deb
sudo apt install obs-websocket_4.7.0-1_amd64.deb
```
## Blog post
January 25-27, CodeRefinery had a hackathon about online teaching. The goal
How hackathon worked
Initial goals
How it went
Outputs