These are notes while researching a way to convert a browser/website to a stream. This could be used for Facebook Live or for webrecording. TL'DR:
- I started with Phantomjs - but that didn't support the html5 video tag
- SlimerJS supports it, but there is no way to record audio directly (though this might come from desktop audio)
- So I moved to research ffmpeg/X11/XVFB to record it with linux which works
- But ffmpeg has no easy way to mix streams/overlays to I moved on to OBS with overlay browser support
- I started researching options OBS in docker and it needed best a GPU , so I move to nvidia-docker
- And so came across building game servers on EC2/AWS using GPUs and managed to run OBS inside of GPU g2x.large machine
- I tried streaming to twich , which works great and managed to restream 4K 60FPS youtube on an AWS instance
- Remote control works through OBS-Remote but OBS has kinda limit in types of features
- Xsplit (some JS automation), Wirecast (no automation found, besides keypresses) , Livestream.com (non-scriptable) and found Vmix.com which an API (but costs 799$)
- For Overlaying systems , nodeCG looks nice
- Sending RTMP to FBlive and periscope works fine
- Looked into redundancy for RTMP as FBLive ends the post/stream when the stream ends (options are ffmpeg UDP switch over and zencode RTMP ping)
- For CDN still looking livestream.com vs Cloudfront/Fastly with their HLS setup
- Possibly use restream.io to send it to multiple feeds.
To be continued.
Phantomjs:
- Recording a page with phantomjs & fmpeg - http://mindthecode.com/recording-a-website-with-phantomjs-and-ffmpeg/
- Ffmpeg recording/Docker with - https://hub.docker.com/r/danscan/node-ffmpeg-phantomjs/
- Browse web in VR using Aframe using phantomjs & ffmpeg - https://github.com/cjroth/aframe-phantomjs-continuous-streaming
- Simple gist on recording - https://gist.github.com/phanan/e03f75082e6eb114a35c
- using Render Animated Content from HTML5-Canvas - https://blog.animatron.com/2014/01/22/how-we-render-animated-content-from-html5-canvas/
Slimerjs:
- Recording WebGl apps with slimerjs on EC2/AWS - https://gist.github.com/vizath/7eeab41a42cb0a95f0f4
- Recording slimerjs with ffmpeg & gif /dev/stdout - laurentj/slimerjs#369
XVFB linux recording:
- Docker, ffmpeg and vnc for recording, xvfb https://github.com/fcwu/docker-ubuntu-vnc-desktop/blob/master/Dockerfile
- Using ffmpeg & X11 to grab and stream ustream, hulu, twitch.tv - https://github.com/karlellis/ScreenStudio
- Grabbing XFVB & FFmpeg hulu, netflix etc.., uses selenium to log you in - https://github.com/grayleonard/xvfb-record/blob/master/login.py
Docker/X11/GPU:
- Jessie Frazelle's blog - Docker containers on the desktop - examples on using X11 on OSX to run some X clients like Skype, Chrome etc.. - https://blog.jessfraz.com/post/docker-containers-on-the-desktop/
- Docker for Mac and GUI applications by Frederik Averpil - https://fredrikaverpil.github.io/2016/07/31/docker-for-mac-and-gui-applications/
- Nvidia Docker(gpu) - https://github.com/NVIDIA/nvidia-docker/wiki/Deploy-on-Amazon-EC2
- Setting up Coreos to use GpU - https://github.com/ryanolson/CoreOS-GPU
- Building Nvidia drivers on Coreos Linux - https://github.com/Clarifai/coreos-nvidia
- Simplify building Nvidia drivers on Coroes - http://blog.clarifai.com/how-to-simplify-building-nvidia-gpu-drivers-on-coreos/#.WH4-bLYrLUJ
Setup windows EC2/GPU/OBS:
- Reddit page on "MFPlat.dll missing" - https://www.reddit.com/r/starcitizen/comments/3wi7is/psa_if_you_get_a_missing_mfreadwritedll_or/
- Solves "MFPlat.dll is missing" - First need to install Media Services feature before then Adding Media Feature Pack - https://answers.microsoft.com/en-us/windows/forum/windows_10-other_settings/media-feature-pack-for-windows-10-n-was-removed-by/f593a2ec-d475-44e3-8eb9-cd3f0cbf69fa
- Cloudgaming on EC2 - Nice markdown & screenshot of the setup - https://github.com/PixelPirate/ec2-gaming
- Setup Windows on GPU notes from Daniel Thomas (specific on NV_Modes to support more screenmodes> - https://github.com/DanielThomas/ec2gaming/wiki/First-time-configuration
- Golang VNC Alternative - https://github.com/openai/go-vncdriver
- Cloudformation template to run AWS EC2 gpu Windows - https://serverlesscode.com/examples/2016-05-steam-engine.json
- AWS EC2 gpu Windows - Gaming on a Budget - https://serverlesscode.com/post/gaming-on-a-budget-cloudformation/
- EC2 gpu gaming with Steam in-Home Streaming , no specifics - http://www.51samplecode.com/download/c43a4937p0.html
- Startup time and using EBS , seems to hint you best pre-warm your EBS before playing games - https://www.reddit.com/r/cloudygamer/comments/5a1r9v/startup_time_and_using_ebs/
- Reddit page around cloudygames - https://www.reddit.com/r/cloudygamer/new/
- Powershell automated setup script for AWS Windows GPU setup - https://github.com/lg/cloudy-gamer/blob/master/cloudygamer.psm1
- lg.io Original poster Lang - github repo on AWS EC2 gaming - https://github.com/lg/cloudy-gamer#beta-automated-cloudygamer-provisioning-of-machine
- lg.io Reviewed EC2 - Revised and much faster , run your own high-eng cloud gaming on EC2 - https://lg.io/2015/07/05/revised-and-much-faster-run-your-own-highend-cloud-gaming-service-on-ec2.html
- lg.io Cloudy Gamer - Playing overwatch on Azure's new monster GPU Instances , cheaper & faster than AWS EC2 - https://lg.io/2016/10/12/cloudy-gamer-playing-overwatch-on-azures-new-monster-gpu-instances.html
- Cloudar post on AWS EC2 Gaming - some good hints on Nvidia setup - https://cloudar.be/awsblog/how-to-use-aws-ec2-gpu-instances/
- Some nerdy paper on building an open cloud gaming system - http://gaminganywhere.org/gaming_anywhere.html
- Seems OVH has gpus too - https://www.ovh.com/us/dedicated-servers/gpu/
- Gaming on aws - Another post with screenshots how to setup aws , drivers etc - https://nexus.vert.gg/gaming-on-amazon-s-ec2-83b178f47a34#.79i943ovi
- Soon Nvidia may have their own game cloud - https://techcrunch.com/2017/01/04/nvidias-geforce-now-puts-a-gaming-pc-in-the-cloud/
- AWS EC2 Elastic GPU's on Reddit - https://news.ycombinator.com/item?id=13072478
- AWS Blogpost on Elastic GPU's - https://aws.amazon.com/blogs/aws/in-the-work-amazon-ec2-elastic-gpus/
- AWS Instance types GPU's - http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/accelerated-computing-instances.html#optimize_gpu
- New P2 Instance Types on aws - https://aws.amazon.com/blogs/aws/new-p2-instance-type-for-amazon-ec2-up-to-16-gpus/
Setup linux/GPU:
- An ubuntu gpu desktop - https://github.com/rncry/gpu-desktop
- Discussion on CasparCG on AWS ec2 GPU - http://casparcg.com/forum/viewtopic.php?f=3&t=2050
OBS:
- Silent install - https://chocolatey.org/packages/obs-studio/0.15.4
- Run OBS on EC2 Windows instances - https://obsproject.com/forum/threads/how-to-run-obs-studio-on-aws-ec2-windows-2012-r2-instance.44337/
- Running OBS inside of Docker - https://github.com/Spoon4/docker-obs
- Another one running OBS inside docker , hints at using XVFB is possible to run it - https://github.com/danielguerra69/obs-studio/blob/master/Dockerfile
- OBS Lag issues - Use gpu in streaming settings - https://youtu.be/GH8ZZRo91iM
- OBS black window for Chrome - don't forget to disable in Chrome/Advanced/Device accelerations
Controlling OBS from remote:
- NodeCG remote interface using javascript - https://github.com/nodecg/obs-remote-js/blob/master/docs/OBSRemote.md
- OBS-Browser studio browser plugin - seems to handle events , but no changes - https://github.com/kc5nra/obs-browser
- OBS-Websocket - https://github.com/Palakis/obs-websocket
Overlay systems:
- OBS Overlay system - https://github.com/spenibus/obs-overlay-html-js - See blogpost http://spenibus.net/b/p/p/OBS-Overlay-The-illustrated-guide
- Twitch overlay system - http://overlayr.net/
- Twitch overlay - https://twitchoverlay.com
- Stream Pro - https://streampro.io/
- Strexm.tv - https://strexm.tv/
- StormG - https://github.com/caitp/stormg
- NodeCG Dashboard solution gist - https://gist.github.com/Lange/021285daa424578763f7fdc83ba3772a
- NodeCG Awesome demos - https://github.com/nodecg/awesome-nodecg/blob/master/README.md
- NodeCG Docker image - https://github.com/nodecg/nodecg
- Insight into Stream Overlay creation - http://lilchen.com/blog/insight-into-stream-overlay/
- OBS Studio browser plugin github - https://github.com/kc5nra/obs-browser
- NodeCG documentation - http://nodecg.com/
- NodeCG transition bundle - https://github.com/Tam/nodecg-transition
Livestream control:
- Livestream seems to have a studio cloud version and hints at a web control - http://www.lemac.com.au/GeneralNews/LivestreamannouncesnewStudio40andStudioCloudsoftware.aspx
- Livestream web control page - https://studio-webcontrol.livestream.com/
- More explanation on Studio Web Control - https://help.livestream.com/hc/en-us/articles/216286388
Xsplit control:
- Javascript framework for control of xsplit - http://xjsframework.github.io/quickstart.html
Vmix Scripting:
- Vmix Web API - http://www.vmix.com/help17/Scripting.html
CDN:
- Fastly Video caching system - https://docs.fastly.com/guides/about-fastly-services/about-fastlys-video-caching-service
- Livestream studio for incoming rtmp streams - RTMP Server - https://help.livestream.com/hc/en-us/articles/217694678-Setting-Up-Studio-as-an-RTMP-Server
RTMP:
- Docker-Nginx-RTMP - https://github.com/R0GGER/docker/tree/master/obs-streaming
- MistServer - FFmpeg , RTMP, RTSP, WebUI , HTTP - https://github.com/R0GGER/mistserver
- Live failover configuration - Wowza support - "But you can configure fail-over with Live Stream Repeater:" - https://www.wowza.com/forums/showthread.php?36203-Live-failover-configuration
- Selfhosted Alternative to FB Live using Nginx (record,stream and archive videos on end) - https://aaronparecki.com/2016/11/19/15/self-hosted-facebook-live
- Private RTMP Server using Nginx - https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/
- Youtube explaining RTMP - Nginx - https://www.youtube.com/embed/RqzFGeHMdLo
Thanks a lot for this! I went through many of the same processes. I was initially looking to build a headless OBS container, but after some exploration I've decided that OBS is completely inappropriate for the task.
I've also found a huge list of related resources here: https://ebu.io/opensource