Twitch Livestream Загрузка

Привет, ребята, я не смог найти решение этой проблемы и думаю, можете ли вы помочь мне. Я ищу инструмент, который будет работать в фоновом режиме и смотреть URL-адрес потокового вещания, а когда начнется прямая трансляция, он загрузится на мой локальный компьютер. Ваша помощь будет принята с благодарностью.

1 ответ

Решение

Что касается загрузочной части вашего вопроса, вы можете использовать livestreamer, например:

livestreamer <livestream-url> best -o vod.mp4

Для инструкций по установке проверьте этот ответ henry.


На самом деле не должно быть слишком сложно отслеживать активность потока через API Twitch. Например, вы можете выполнить простой curl запрос направлен на grep чтобы определить, находится ли поток в автономном режиме или есть другой тип ошибки:

curl -s  https://api.twitch.tv/kraken/streams/totalbiscuit | grep '"stream":null'

Это вернётся как true, если в данный момент поток не запущен.

Имея это в виду, вы можете разработать простой цикл, который будет проверять наличие активных потоков каждые несколько минут, например:

#!/bin/bash

Channel="totalbiscuit"

while sleep 60; do
  if ! curl -s "https://api.twitch.tv/kraken/streams/$Channel" | grep -q '"stream":null'; then
    echo "$Channel is live. Downloading stream..."
    livestreamer "http://www.twitch.tv/$Channel" best -o "${Channel}_livestream.mp4"
  else
    echo "$Channel is offline"
  fi
done

Или, немного более сложный и с большим количеством проверок работоспособности:

#!/bin/bash

# Simple Twitch Poller
# Author: Glutanimate
# License: GPL v3
# Dependencies: livestreamer
# 
# Description: Polls twitch channel status and downloads stream if user is online

Usage="$0 <space-separated list of twitch channels>"

Channels=($@)

Interval="60" # polling interval in seconds

if [[ -z "$Channels" ]]; then
  echo "Error: No channels provided"
  echo "Usage: $Usage"
  exit 1
fi

while true; do
  for i in ${Channels[@]}; do
    StreamData="$(curl -s  "https://api.twitch.tv/kraken/streams/$i")"
    if echo "$StreamData" | grep -q '"status":404'; then # 404 Error
      echo "Error: $i does not exist."
      break 2
    elif echo "$StreamData" | grep -q '"stream":null'; then # Channel offline
      echo "$i is offline."
    else # Channel online
      echo "$i is live. Downloading stream..."
      livestreamer "http://www.twitch.tv/$i" best -o "$(date +"${i}_TwitchVOD_%Y-%m-%d_%H%M%S.mp4")"
    fi
  done
  sleep "$Interval"
done

Чтобы попробовать этот сценарий, скопируйте и вставьте приведенный выше кодовый блок в новый пустой текстовый файл, сохраните его как twitch_poller.sh или что-то подобное и сделайте его исполняемым через меню "Свойства" вашего файлового менеджера (щелкните правой кнопкой мыши → Свойства → Разрешения → Разрешить запуск файла как программы).

Убедитесь, что у вас установлен livestreamer, затем запустите скрипт из терминала, предоставляя каналы мониторинга, которые вы хотите отслеживать, например:

$ './twitch_poller.sh' totalbiscuit TSM_Dyrus
totalbiscuit is offline.
TSM_Dyrus is live. Downloading stream...
[cli][info] Found matching plugin twitch for URL http://www.twitch.tv/TSM_Dyrus
[cli][info] Available streams: audio, high, low, medium, mobile (worst), source (best)
[cli][info] Opening stream: source (hls)
[download][..D_2014-11-07_001503.mp4] Written 3.1 MB (6s @ 460.6 KB/s)

Вы можете настроить интервал опроса, установив Interval переменная в скрипте.

Другие вопросы по тегам