====== Live HLS Dynamic Bitrate Streaming ======
Beim nginx wird im rtmp-Kontext eine Applikation //src// erstellt, die gleich zu [[events:30c3:cdn:live-rtmp-dynamic-bitrate]] ist. Weiteres dort.
In der Applikation //stream// wird den verschiedenen Varianten die Bandbreite mitgeteilt. Diese berechnet sich aus der Video- + Audio-Bandbreite. Dadurch werden ''.m3u8''-Playlists pro Variante erstellt, die in ''/tmp/hls/$name_variant/index.m3u8'' abgelegt werden. Ebenso wird eine “globale” ''.m3u8''-Playlist für den Stream an sich in ''/tmp/hls/$name.m3u8'' erstellt, die auf die Varianten-Playlists verweist.
application src {
live on;
sync 50ms;
pull rtmp://cp76072.live.edgefcs.net/live/EDU-HQ-Flash@42809 app=live playPath=EDU-HQ-Flash@42809 name=nasa;
pull rtmp://aljazeeraflashlivefs.fplive.net:1935/aljazeeraflashlive-live/aljazeera_eng_high app=aljazeeraflashlive-live playPath=aljazeera_eng_high name=aljazeera static;
exec /usr/bin/ffmpeg -i rtmp://localhost:1935/src/${name}
-c:a libfdk_aac -b:a 16k -c:v libx264 -b:v 128K -f flv -s 160x90 rtmp://localhost/stream/$name_low
-c:a libfdk_aac -b:a 32k -c:v libx264 -b:v 256K -f flv -s 320x180 rtmp://localhost/stream/$name_mid
-c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 512K -f flv -s 640x360 rtmp://localhost/stream/$name_hi
-c:a copy -b:a copy -c:v copy -b:v copy -f flv rtmp://localhost/stream/$name_full;
}
application stream {
live on;
hls on;
hls_nested on;
hls_path /tmp/hls;
hls_fragment 5s;
hls_variant _low BANDWIDTH=144000;
hls_variant _mid BANDWIDTH=288000;
hls_variant _hi BANDWIDTH=576000;
hls_variant _full BANDWIDTH=864000;
}
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=144000
aljazeera_low/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=288000
aljazeera_mid/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=576000
aljazeera_hi/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=864000
aljazeera_full/index.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:575
#EXT-X-TARGETDURATION:7
#EXTINF:5.760,
575.ts
#EXTINF:6.560,
576.ts
#EXTINF:5.320,
577.ts
#EXTINF:5.560,
578.ts
#EXTINF:6.800,
579.ts
#EXTINF:5.080,
580.ts
Im http-Kontext des nginx wird die Location ''/hls'' benötigt, die auf ''/tmp/hls'' zeigt. Dieses sollte als tmpfs erzeugt sein.
Der Stream kann nun über http://stream.konvergenzfehler.de/hls/aljazeera.m3u8 abgerufen werden. Am besten ist es, diesen mit einem HLS-fähigen Endgerät (iPhone, iPad) anzuschauen, da dort erkennbar ist, wie erst die schlechteste Qualität abgerufen und dann hoch skaliert wird.