2
0

2018-04-10-raspi-hypriot-hardware-h264-transcoding.md 2.5 KB

{:title "Using RasPi for Video" :layout :post}

The RasPi has great hardware for working with video. Sofar we're able to transcode three streams and run the Pi camera at 30fps, encode and deliver with a few secods of latency, even when accounting for intermediate CDN caching. More details here.

This article is a living document... as of now this is what we use to go live.

Based on the nginx-rtmp config here: GitHub

720:

./ffmpeg -hide_banner -y -codec:v h264_mmal -i rtmp://localhost:1935/ispoogedaily_source_720/ispoogedaily_720 -c:a copy -c:v h264 -profile:v main -sc_threshold 0 -g 60 -keyint_min 50 -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -b:v 6000k -maxrate 6420k -bufsize 9000k -f flv rtmp://localhost:1935/ispoogedaily_local/ispoogedaily_720

360:

./ffmpeg -hide_banner -y -codec:v h264_mmal -i rtmp://localhost:1935/ispoogedaily_source_360/ispoogedaily_360 -c:a copy -c:v h264 -profile:v main -sc_threshold 0 -g 60 -keyint_min 50 -vf scale=w=640:h=360:force_original_aspect_ratio=decrease -b:v 3000k -maxrate 3210k -bufsize 4500k -f flv rtmp://localhost:1935/ispoogedaily_local/ispoogedaily_360

240:

./ffmpeg -hide_banner -y -codec:v h264_mmal -i rtmp://localhost:1935/ispoogedaily_source_240/ispoogedaily_240 -c:a copy -level:v 1.0 -c:v h264 -profile:v main -sc_threshold 0 -g 60 -keyint_min 60 -vf scale=w=426:h=240:force_original_aspect_ratio=decrease -b:v 800k -maxrate 1000k -bufsize 3000k -f flv rtmp://localhost:1935/ispoogedaily_local/ispoogedaily_240

live twitch:

live youtube:

https://gist.github.com/mikoim/27e4e0dc64e384adbcb91ff10a2d3678

./ffmpeg -i rtmp://localhost:1935/ispoogedaily_local/ispoogedaily_720 \
  -c:v libx264 -preset slow -profile:v high \
  -crf 18 -coder 1 -pix_fmt yuv420p -movflags \
  +faststart -g 30 -bf 2 -c:a aac -b:a 384k \
  -profile:a aac_low -f flv rtmp://a.live.youtube.com/li...FIXME

number of slices:

find /tmp/hls/ispooge.com -name *.ts | wc -l

number of streams:

find /tmp/hls/ispooge.com -name *.m3u8 | wc -l

check tmpfs (where segments are written):

df -h | grep /tmp$

top right small view:

  • screencast

raspivid -p 960,22,320,180 -t 0 -w 320 -h 180 -fps 30 -hf -b 1048576

top left large view:

  • whiteboard

raspivid -p 0,20,960,540 -t 0 -w 960 -h 540 -fps 30 -b 8388608

  • record

raspivid -p 0,20,960,540 -t 0 -w 960 -h 540 -fps 30 -b 8388608 -o sample.h264