世界中のライブTV M3Uリンクを自動収集・検証・整形してくれる OSS「LiveTVCollector」

タグ columnコラムlinuxLinuxwindowsWindowsGitHubオープンソースbugsfreewebLiveTVCollector
🚀 今すぐ試せます! デモスクリプトをダウンロードして、解凍後にターミナルで bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。 (macOS / Linux 環境が必要)

世界中のライブTV M3Uリンクを自動収集・検証・整形してくれる OSS「LiveTVCollector」

ひとことでいうと

LiveTVCollector は、世界各国のライブTVストリーミングリンク(M3U プレイリスト形式)を自動で収集・重複除去・死活確認し、複数フォーマットで整形・出力してくれる Python 製のオープンソースツールです。対応国はブラジル・インド・トルコ・ロシア・イタリアなど 16 か国以上にのぼります。GitHub Actions と組み合わせれば、1日3回の自動更新をローカル環境ゼロで動かすことができます。自分で M3U ファイルを手動管理していた人にとって、大きな手間を省いてくれる一本です。


こんな人におすすめ

1. 自作 IPTV プレイヤーや Kodi のプレイリストを常に最新状態に保ちたい人 GitHub Actions で 8 時間ごとに自動更新されるため、チャンネルが死んでいないかを手動チェックする必要がなくなります。M3U ファイルへのパスを一度登録すれば、あとは放置するだけです。

2. 各国のライブTVチャンネルを研究・調査したい開発者や学生 国別に整理された JSON データはそのまま API レスポンスのモックとしても使えます。チャンネルの生存率や地域別の配信トレンドを調べるデータソースとしても活用できます。

3. M3U 収集・フィルタリングのパイプラインを自分のプロジェクトに組み込みたいエンジニア MIT ライセンスで公開されており、source_urls リストを書き換えるだけで独自ソースへの対応が可能です。重複除去・死活確認・エクスポートはすべてコード側が担うので、収集先だけ差し替えればすぐ流用できます。


インストール・使い方

Step 1: リポジトリをクローンする

git clone https://github.com/bugsfreeweb/LiveTVCollector.git
cd LiveTVCollector

GitHub からソースコードをローカルにコピーします。フォークしてから使うと、後述の GitHub Actions 自動実行も有効化しやすくなります。

Step 2: 依存パッケージをインストールする

pip install -r requirements.txt

requests(HTTP通信)・pytz(タイムゾーン処理)・beautifulsoup4(HTML解析)の3つがインストールされます。Python 3.8 以上を推奨します。

Step 3: 国別スクリプトを実行する

# 例: インドのライブTVリンクを収集・検証する場合
python BugsfreeStreams/process_streams-IN.py

スクリプトは source_urls に列挙された M3U ファイルや HTML ページを順番に読み込み、リンクを抽出・検証します。実行が完了すると LiveTV/India/ ディレクトリ以下に4つのファイルが生成されます。

Step 4: 出力ファイルを確認する

生成される出力ファイルは以下の4種類です。

ファイル名用途
LiveTV.m3uKodi・VLC などのプレイヤーに直接読み込める標準形式
LiveTV.txtURL の一覧テキスト。シンプルな確認や差分チェックに便利
LiveTV.jsonname / type / url / img の4フィールドを持つ JSON
LiveTV(拡張子なし)カスタム JSON。フロントエンドへの組み込みに最適化された形式

Step 5: GitHub Actions による自動実行を有効化する

フォークしたリポジトリの「Actions」タブでワークフローを有効化すると、UTC 00:00 / 08:00 / 16:00(日本時間 09:00 / 17:00 / 翌01:00)の3回、自動でスクリプトが走ります。.yml ファイルに permissions: contents: write が設定されていることを確認しておきましょう。これにより、収集結果がリポジトリに自動コミットされます。


動かしてみた

Python 3.12 の環境で依存パッケージのインストールを確認し、ディレクトリ構造を検証しました。

BugsfreeStreams/ 以下には、BR・TH・MX・ID・PT・EG・TR・PK・MXD・MY・IL・BD・IT・RU・VN・IN の 16 か国分の処理スクリプトが揃っており、それぞれに対応する processed_links-XX.json が同梱されています。VOD 向けとして process_streams_VOD-WW.py(ワールドワイド対応)も存在しており、ライブストリームだけでなくオンデマンド系のリンク収集にも応用できる構造になっています。

LiveTV/index.json には収集済みインデックスデータが保持されており、既存のデータを上書きせずに差分更新できる設計が確認できます。スクリプト間で共通の処理フロー(URL抽出→重複除去→死活確認→エクスポート)が統一されているため、新しい国を追加する際も既存ファイルをテンプレートとして流用しやすい構成です。

出力 JSON のサンプルは以下のような構造です。

[
  {
    "name": "Adventure TV",
    "type": "Entertainment",
    "url": "http://109.233.89.170/Adventure_HD/index.m3u8",
    "img": "https://i.imgur.com/VQVr4Nk.png"
  }
]

M3U 形式では #EXTINF:-1 tvg-logo="..." group-title="...",チャンネル名 の行に続いてストリーム URL が並ぶ標準的なプレイリスト構造になっています。


はじめの一歩:実践のコツ

LiveTVCollector を使いこなすうえで、最初に押さえておくとよいポイントを紹介します。

  • まずは1か国のスクリプトを単体で動かしてみる。全国分を一気に実行するより、process_streams-IN.py など1ファイルを単体で実行して出力を確認するほうが構造を把握しやすいです。
  • source_urls リストを編集して独自ソースを追加する。各スクリプトの先頭付近に source_urls という Python リストがあります。ここに M3U の直接 URL や、M3U リンクを掲載している HTML ページの URL を追記するだけで収集対象を拡張できます。
  • Telegram や GitHub のリンクは自動フィルタされる。非ストリーム系の URL はスクリプト内で自動排除されるため、ソース HTML が少々汚れていても気にせず渡せます。
  • 並列数とタイムアウトはコード内で調整できる。デフォルトは 50 並列・タイムアウト 5 秒です。ネットワーク環境が不安定な場合は並列数を下げる、あるいはタイムアウトを伸ばすと安定しやすくなります。
  • GitHub Actions で動かす場合は permissions: contents: write を確認する。この設定が抜けていると、実行結果のコミットに失敗します。フォーク直後に .github/workflows/ 以下の .yml を開いて確認しておきましょう。
  • VOD スクリプト(process_streams_VOD-WW.py)は別途確認する。ライブストリーム向けとは別に、VOD 用のスクリプトも同梱されています。用途に応じて使い分けてください。

活用アイデア

  • Kodi・VLC への直接インポート: 生成された LiveTV.m3u を IPTV プラグインのプレイリスト URL として登録すると、リポジトリが更新されるたびに最新チャンネル一覧を自動取得できます。
  • チャンネル生存率の研究・可視化: LiveTV.json をパースして、国別・カテゴリ別のチャンネル数推移をグラフ化すると、公開 IPTV ストリームの地域分布や生存率の変動を観察できます。学術調査やデータ可視化の練習素材としても使えます。
  • 独自 Web プレイヤーへの組み込み: カスタム JSON 形式(LiveTV)は name / type / url / img の4フィールドだけのシンプルな構造です。React や Vue で作った自前プレイヤーに直接フィードするのも難しくありません。
  • GM TV Player・BirdsEye TV などとの連携: リポジトリに含まれる対応プレイヤーに収集済み JSON の URL を渡すだけで、ブラウザ上での視聴環境を素早く構築できます。
  • 語学学習・海外ニュース視聴: 特定国(インド・ブラジル・トルコなど)のチャンネルを抽出して語学学習用のプレイリストとして整理するのも実用的な使い道です。
  • 企業のメディアモニタリング: 各国ニュースチャンネルの URL 一覧を定期収集し、死活監視と組み合わせることで、放送モニタリング用の URL データベースとして活用できます。

用語とポイント解説

M3U MPEG URL の略称で、ストリーミング URL とチャンネル名・ロゴなどのメタデータをまとめて記述するプレイリスト形式です。Kodi・VLC・スマートTV など幅広いプレイヤーが標準対応しています。

IPTV Internet Protocol Television の略で、インターネット回線を通じて映像を配信する仕組みです。従来の地上波・ケーブル放送とは異なり、ファイル配信と同じ TCP/IP 技術を使います。

#EXTINF M3U ファイル内の拡張情報タグです。チャンネル名・ロゴ URL・グループ情報などを1行にまとめて記述し、この行の直後にストリーム URL を続けます。

tvg-logo #EXTINF 行内に書く拡張属性で、チャンネルロゴ画像の URL を指定します。対応プレイヤーではロゴが自動表示されます。

group-title #EXTINF 行内に書く拡張属性で、プレイヤー上でのグループ分けに使用されるカテゴリ名です。「News」「Sports」「Entertainment」などを指定するのが一般的です。

BeautifulSoup4 Python 用の HTML/XML パーサーライブラリです。LiveTVCollector では M3U リンクを直接掲載している HTML ページをスクレイピングして URL を抽出するために使われています。

pytz Python 用のタイムゾーンライブラリです。LiveTVCollector では収集済みデータのタイムスタンプを IST(インド標準時)で付与するために利用されています。

GitHub Actions GitHub が提供する CI/CD(継続的インテグレーション・デリバリー)サービスです。LiveTVCollector ではリポジトリの .github/workflows/ 以下に定義された .yml ファイルを使い、指定した cron スケジュールでスクリプトを自動実行します。

processed_links-XX.json 各国スクリプトが前回実行時に確認済みのリンクをキャッシュしたファイルです。差分更新の基準として使われるため、毎回ゼロから収集し直す必要がなく処理時間を短縮できます。

HTTP HEAD リクエスト サーバーにファイル本体を要求せず、レスポンスヘッダーだけを取得する HTTP メソッドです。LiveTVCollector はまず HEAD リクエストでリンクの生死を確認し、取得できない場合は GET でフォールバックします。帯域消費を抑えながら高速に死活確認できるのが利点です。


ライブ配信リンクの管理は「集めて終わり」ではなく、定期的な確認と更新が必要です。LiveTVCollector はその繰り返し作業を自動化してくれるツールです。ぜひ自作 IPTV プレイヤーへのプレイリスト供給や、各国放送チャンネルのデータ研究などに活用してみてはいかがでしょうか。