System works very simply, it uses Xvfb to create a virtual display, PulseAudio to create a virtual audio device, and ffmpeg to record the screen and audio. Setups chromedp for the browser automation to record any browser url.
- docker.
docker build -t recorder-dev .
Preffred to use the docker-compose to run the container.
docker-compose up
SSH into the container to run the server.
make run
NOTE: Check you are inside the app working directory.
Check the server is running by visiting the http://localhost:3000/
.
Sometimes Pulse Audio just doesn't want to start, so to give it a little push,
After you SSH inside the container, run the following command.
`./pulseaudio.sh`
BUCKET_ENDPOINT
- AWS S3 Bucket Endpoint.BUCKET_NAME
- AWS S3 Bucket Name.BUCKET_KEY_ID
- AWS S3 Bucket Key ID.BUCKET_APP_KEY
- AWS S3 Bucket Secret Key.BUCKET_REGION
- AWS S3 Bucket Region.
/ping
- To check the server is running.
curl --location 'http://localhost:3000/ping'
/start-recording
- To start the recording.
curl --location 'http://localhost:3000/start-recording' \
--header 'Content-Type: application/json' \
--data '{
"record_url": "https://www.youtube.com/watch?v=cii6ruuycQA&ab_channel=OliviaRodrigoVEVO"
"stream_url: "rtmp://a.rtmp.youtube.com/live2/<stream_key>"
}'
/stop-recording
- To stop the recording. Use the id from the start-recording response.
curl --location --request PATCH 'http://localhost:3000/stop-recording' \
--header 'Content-Type: application/json' \
--data '{
"id": "pipeline_1725213615468"
}'
- Add API server Capabilties to make custom recording calls.
- Ability to record multiple recordings at the same time. ( Took some time to figure out the pulse audio thing )
- Do proper file system implementation to handle different recordings.
- Add Capabilties to do livestreaming onto multiple rtmp, rtmps endpoints ( Hopefully ffmpeg will make it easy )
- Maybe do the kubernetes thing for auto scaling.
- Benchmarking, because I know sometimes recordings will fail to record propely, because its life.
- Add more documentation.
- Add more tests
- To get all the running pulse audio
pactl list short sources
- To Close the pulse audio
pulseaudio -k
- To Close all the Pulse Sink
pactl unload-module module-null-sink
- To Read all the running Process
ps aux
very useful to check for memory leaks, and zombie processes.