Spring naar hoofdtekst

Download NPO-streams zonder browser

Geplaatst op door ,
Laatste aanpassing op .

Inleiding

Een tijd geleden schreef ik over een download-script voor de live-stream van NPO-nieuws, het kanaal met 24/7 nieuws van de nederlandse publieke omroep. Sindsdien is er een hoop veranderd in het aanbod van de NPO, waardoor mijn script niet meer naar behoren werkte.

In eerste instantie probeerde ik op eigen houtje de streams op het spoor te komen door de broncode en het netwerkverkeer door te lichten. Ik kwam niet verder dan een onbetrouwbaar downloadscript dat soms wel, maar meestal niet functioneerde. Dit moest anders!

YouTube-DL

Toen kwam ik het youtube-dl-project op het spoor. Deze mensen hadden al het 'vuile werk' inzake streams al opgeknapt en boden legio mogelijkheden om er voor en na het downloaden mee te stoeien. Ze bleken zelfs al een module aan boord te hebben voor de NPO…

Er waren wel nog een aantal handelingen nodig om de stream in VLC te kunnen bekijken:

  • download-URL bepalen met behulp van youtube-dl
  • met avconv (ffmpeg) het bestand downloaden als .ts-transportstream
  • met VLC deze transportstream openen en weergeven
  • na afloop, avconv afschieten en het tijdelijke bestand verwijderen

Update

Met dank aan Eldert Francke is er voor het direct bekijken van de live-streams een kortere oplossing, die ook nog eens de beste beeldkwaliteit levert (hier als voorbeeld de stream van NPO2):

$ youtube-dl -o - "https://www.npo.nl/live/npo-2" | vlc -

Wrapper-script

Aldus besloot ik in Bash een wrapper-script te schrijven, dat al deze stappen comfortabel samenvat. Hiermee kan ik nu de reguliere (1, 2, 3) en thema-kanalen van de NPO (Nieuws, Cultura) live bekijken zonder browser, dan wel downloaden.

#!/bin/bash
#
# Script for viewing the NPO-livestreams using a temporary file as buffer,
# utilizing youtube-dl (https://rg3.github.io/youtube-dl/)
#

USAGE="Usage: $( basename ${0} ) [-h] [-k] -s npo-1|npo-2|npo-3|npo-nieuws|npo-cultura
  -h Show this usage message
  -k Keep the downloaded transport stream
  -s Stream to download and view
";

KEEPFILE=0;
STREAMTOVIEW='';

# Process commandline arguments
while getopts "h?ks:" opt; do
    case "$opt" in
    k)  KEEPFILE=1;
        ;;
    s)  STREAMTOVIEW=$OPTARG
        ;;
    h|\?|*)
        echo "${USAGE}";
        exit 0;
        ;;
    esac
done

if [ "${STREAMTOVIEW}x" == "x" ]; then
  echo "Please choose one of the streams to view.
";
  echo "${USAGE}";
  exit 1;
fi

URL="$( youtube-dl --get-url "https://www.npo.nl/live/${STREAMTOVIEW}" 2>/dev/null )";

# Could the URL be determined?
if [ ${?} -ne 0 ]; then
  echo "Error downloading stream.";
  exit 1;
fi

# Make a temporary transportstream buffer
TEMPFILE="$( mktemp /tmp/tmpXXXXXXXX.ts )";

# Start the download and conversion
avconv -y -i "${URL}" "${TEMPFILE}" 2>/dev/null &

# Capture the process ID
AVCONVPID=$!;

# Give it time to buffer some data
sleep 2;

# Start the media viewer
vlc "${TEMPFILE}" 2>/dev/null;

# Kill the download process
kill -2 ${AVCONVPID};

# Clean-up
if [ ${KEEPFILE} -eq 1 ]; then
  echo "Keeping temporary file: ${TEMPFILE}";
else
  rm "${TEMPFILE}";
fi

exit 0;

Inhoudsopgave

Klik op één van de onderstaande categorieën om de lijst met artikelen te filteren.