Apple TVで北京聯通IPTVを視聴する

✍🏼 作成日 2023年10月30日    💡 更新日 2024年01月09日
🖥  説明:この記事では、Apple TVを使って北京聯通IPTVを視聴する方法を紹介し、必要な方の参考に供します。

はじめに

以前このブログ記事で、家庭での映画鑑賞の方法について紹介しました。その中で触れたポイントの一つは、ネット上で他の人が取得したIPTVの番組アドレス(m3u拡張子)をiPlayTVに入れると直接再生できるというものです。しかし、この番組アドレスは一定期間で無効になってしまいます。これは、中国聯通のIPTVサーバーが定期的に番組の再生アドレスを更新するためで、Apple TVに設定したアドレスは固定されており、リアルタイムで更新できないからです。そこで、この問題を解決する方法を紹介します。

🚧**使用前の必読事項:**私は北京聯通のブロードバンドを利用しており、**光回線終端装置(ONU)をブリッジモードに設定し、ルーターでPPPoE接続を行い、ソフトウェアルーターR4Sをサブルーター**として接続しています。このチュートリアルはこのネットワークトポロジーを前提としています。「光回線終端装置をブリッジモード + R4SをメインルーターとしてPPPoE接続」または「光回線終端装置でPPPoE接続 + R4Sをサブルーター」などの他のネットワーク構成でも実現可能ですが、R4Sの重要な設定がこのチュートリアルと若干異なる場合があります。検索して要点を理解し、完全に同じにする必要はありません。

🚧同様に、光回線終端装置で直接PPPoE接続している場合、光回線終端装置からケーブルを直接サブ/メインルーターに接続してマルチキャストをユニキャストに変換することもできます。また、対応デバイスで直接マルチキャストアドレスを使用して再生することも可能で、私のように面倒な手順は必要ありません。具体的にはご家庭のネットワーク構成によります。

🚧このチュートリアルは北京聯通IPTVでのみテスト済みです。他の地域では差異がある可能性があります。地域に強く依存する内容が記載されている場合は、お住まいの地域に合わせて対応する内容に置き換えてください。

🚧設定を変更する前に、万が一に備えてすべてのルーターやデバイスの設定をバックアップしてください。

🚧私が使用しているソフトウェアルーターはR4Sで、2つのネットワークポートがあります。私と同じネットワークトポロジーの場合、ソフトウェアルーターに少なくとも2つ以上のネットワークポートがあることを確認してください。1つはメインルーターに接続し、もう1つは光回線終端装置に接続する必要があるためです。

🚧我が家の光回線終端装置のネットワークセグメントは192.168.1.x、メインルーターのネットワークセグメントは192.168.5.xです。光回線終端装置のアドレスは192.168.1.1、R4Sのアドレスは192.168.5.2、メインルーターのLANポートアドレスは192.168.5.1、ルーターのWANポートアドレスは192.168.1.2です。

無料利用が可能かどうかを確認

🚧現在、北京地域のIPTVには認証が追加されていませんが、私が確認した情報によると、他の地域の一部の通信事業者はIPTVに暗号化認証を導入しています。つまり、通信事業者が提供するIPTVボックスのMACアドレスを使用して接続(ボックスが復号化の役割を果たす)しなければ、ボックスなしでソフトウェアルーターを使用してLAN内の任意のデバイスで再生することはできません。具体的な実現方法は複雑で、このチュートリアルではこのシナリオについては紹介しません。

事前にVLCをダウンロード

光回線終端装置をブリッジモードに設定し、ルーターでPPPoE接続を行うと、光回線終端装置に接続してもインターネットに接続できません。そのため、後でテストを行うために、事前にPCにVLCプレーヤーをダウンロードしておいてください。VLCプレーヤーは以下のリンクからダウンロードできます:

Official download of VLC media player, the best Open Source player - VideoLAN Official download of VLC media player, the best Open Source player https://www.videolan.org/vlc/

光回線終端装置に接続

PCを有線で光モデムのIPTVポートに接続します(光モデムにIPTVポートが見当たらない場合、それは光モデムが混在接続をサポートしていることを意味し、つまりポートがブロードバンドとIPTVを区別せず、どのポートに接続しても構いません)。その後、VLCソフトウェアで以下の手順を実行します:

  • File → Open Networkを開きます。

  • 下にあるOpen RTP/UDP Streamをクリックします。

  • ProtocolはRTPを選択し、ModeはMulticastを選択し、IP Addressには239.3.1.241(またはrtp://239.3.1.241、具体的にどちらかは忘れました)を入力し、ポートには8000を入力します。

Openをクリックした後、北京衛視が見える場合、無料で視聴できることを意味します。

VLC RTP 播放

💡ここにある `rtp://239.3.1.241:8000` は北京衛星テレビのマルチキャストアドレスです。将来このアドレスは変更される可能性があります。正確なアドレスについては、`https://raw.githubusercontent.com/qwerttvv/Beijing-IPTV/master/IPTV-Unicom.m3u` こちらで任意の rtp パスの後にある IP アドレスをテストできます。

基本概念の説明

詳細を知りたくない場合は次のセクションに進んでください。

IPTV

ウィキペディアによる IPTV の説明:

📖インターネットプロトコルテレビ(英語: Internet Protocol Television、略称: IPTV)はブロードバンドテレビの一種です。IPTV はブロードバンドネットワークを媒体としてテレビ情報を伝送するシステムで、放送番組をブロードバンド上のインターネットプロトコル(Internet Protocol, IP)を通じて加入者にデジタルテレビサービスを提供します。ネットワークを使用する必要があるため、IPTV サービスプロバイダーは通常、インターネット接続や IP 電話などの関連サービスもセットで提供し、「トリプルプレイ」サービスとも呼ばれます。IPTV はデジタルテレビの一種であるため、通常のテレビには対応するセットトップボックスが必要で、プロバイダーは通常、ビデオオンデマンドサービスも同時に提供します。ブロードバンドネットワークとインターネットプロトコルを介していますが、IPTV は必ずしもインターネットを経由するわけではなく、伝送品質を確保するためにローカルエリアネットワークで伝送されることがあります。

これにより、一般的に IPTV はブロードバンドプロバイダーが提供するサービスであり、これを通じてテレビを見ることができます。

マルチキャスト

IPTV を実現する技術的手段の一つで、英語では「multicast」と呼ばれ、日本語では「マルチキャスト」とも訳されます。具体的な概念を完全に理解する必要はありませんが、ユニキャストと比較して以下の特徴があります:

利点:

  • インターネット帯域を占有しません。

  • IPTV ボックスは認証の役割を果たし、IPTV 事業者はグループに対してブロードキャストするため、自社サーバーへの負荷が比較的小さくなります。

欠点:

  • 光モデムの IPTV ポートに有線接続する必要があります(一部の光モデムは混在接続をサポートしており、IPTV ポートとブロードバンドポートを区別しません)。そのため、IPTV ボックスに接続されたデバイスしか使用できず、WiFi を利用して家庭内の任意のデバイスでネットワークテレビを見ることはできません。

ユニキャスト

もう一つの古い IPTV 実装技術で、初期の IPTV ユーザーが少ない時期に使用されていました。マルチキャストと比較すると、その欠点が利点となり、逆もまた同様です:

利点:

  • 接続後、ローカルエリアネットワークで WiFi をサポートし、任意のデバイスで再生できます。

欠点:

  • サーバーと1対1で接続するため、サーバーへの負荷が大きく、ユーザーが多いと再生が遅くなる可能性があります。

  • ブロードバンドの帯域幅を占有し、インターネット接続を直接使用して再生します(現在のライブストリーミングと同様です)。

udpxy

udpxy サーバーは**UDP ストリームを HTTP ストリームに変換するプロキシサーバー**で、IP ライブストリームを HTTP ストリームに変換し、さまざまな端末での再生を容易にします。

マルチキャストアドレスを直接取得できない場合、マルチキャストアドレスをユニキャストアドレスに変換するために使用されます。例えば、マルチキャストアドレスが a:b と d:e(a、d は IP アドレス、b、e はポート)の場合、ユニキャストアドレスに変換すると、統一されたアドレス z/a/b、z/d/e になります。プレーヤーはこのアドレス z を監視するだけで済みます。

m3u

**M3U**(MP3 URL の略称)は、マルチメディアリストを再生するためのファイル形式で、当初は MP3 などのオーディオファイルを再生するために設計されましたが、現在では多くのソフトウェアがビデオファイルリストの再生形式として使用しています。

m3u ファイルは、すべてのマルチキャストアドレスを含むテキストファイルです。Apple TV やコンピュータでこのファイルのアドレスを読み取ると、その中のビデオアドレスを再生できます。

EPG

番組表情報を含みます。前の手順で m3u アドレスを取得した後、その中には個々の IP アドレスが含まれていますが、各 IP アドレスがどのチャンネルに対応するかを知るにはどうすればよいでしょうか?この時、EPG を使用してペアリングする必要があります。EPG には各アドレスの番組情報や、チャンネルの簡単な説明さえ含まれています。EPG は通常、ビデオ信号と一緒に放送されます。

ネットワークトポロジー

网络拓扑-主路由拨号

実践操作

🚧始める前に、前述の内容を確認して無料で利用できるかどうかをチェックしてください。

ソフトウェアルーターの設定

udpxy と luci-udpxy のインストール

この手順は通常の操作です。UIからのインストールが最も簡単です(インストール完了後、有効化する前に最後のステップまで進めてください)。

软件安装界面

新しいネットワークインターフェースの作成/設定

この手順は、ソフトウェアルーターが光モデムからのデータを認識できるようにするためのものです。

  • ネットワーク-インターフェース で新しいインターフェースを作成し、任意の名前(例: IPTV)を付けます:

新建 IPTV 接口

矢印部分に注意してください。私はすでに新規作成したため、括弧内に「IPTV」という文字が表示されていますが、新規作成した直後は表示されていません。ここで、eth1は私のLANポートで、メインルーターに接続されています。eth0は別のインターフェースで、光回線終端装置(IPTVポート)に接続されています。ここで私は以前に設定を変更しました。デフォルトでは、eth0がLANポート、eth1がWANポートですが、これは重要ではありません。このステップでは、WANポートをIPTVポートとして使用します。

  • 「IPTV」インターフェースのゲートウェイホップ数とファイアウォール設定を構成する:

配置网关跃点

防火墙配置到 wan 上

  • WANポートのゲートウェイホップ数を設定:

Wan 口网关跃点

  • LANポートのIGMPスニッフィング設定:

IGMP 嗅探

  • ネットワークファイアウォールの設定

网络防火墙配置

防火墙配置2

udpxyサービスの設定

  • 図のように設定してください。ここで注意すべきは、eth0がWANポートであることです。間違えないようにしてください:

打开 UDPXY

最後に [http://192.168.5.2:4022/status]([object Object]) を開いて、udpxy サービスが正常に起動しているかどうかを確認します:

看到这个就表示成功了

その後、以前にVLCで開いていたアドレス rtp://239.3.1.241:8000 を `http://192.168.2.1:4022/rtp/239.3.1.241:8000`` に変更して再度開いてみてください(下にある「Open RTP/UDP Stream」をクリックせず、直接URLで開きます)。

尝试将 RTP 变 HTTP 播放

その後、ダブルクリックで再生できます:

成功画面↑

再生ソフトウェアの使用

私はApple TV 4Kでテレビを見ています。いくつかの再生ソフトウェアを試したので、簡単に説明します:

  • iPlayTVは再生できませんでした。理由はわかりません。

  • Fileballではチャンネルの上下移動は問題ありませんが、チャンネルを選択するとすぐにクラッシュします。

  • 最終的にIIVAと同じ開発者のアプリ「TV+」を選択しました。香港ストアでの価格は38香港ドルでした(購入翌日に無料提供が開始され、少し残念でした)。

アドレスの自動更新を実現する方法

中国聯通のIPTV番組再生アドレスは、定期的に変更されます。ポートが変わることもあれば、IPアドレスが変わることもあります。この方法で再生できなくなった場合、どうすればよいでしょうか?

ネット上には親切な人がいて、次のような複雑な監視操作を行っています:

光纤入户光猫改桥接+内网转发IPTV=任意设备看电视直播 - Botian's Blog 警告:この記事ではローカルネットワーク環境の変更について説明します。一部の操作によりネットワークに接続できなくなる可能性があります。関連するネットワーク知識がない場合、修復が困難で、場合によってはプロバイダーに支援を依頼する必要があるかもしれません。したがって、以下の内容は慎重に操作してください。注意:自宅ネットワークのPPPoE接続アカウントとパスワード(通常は契約時に渡される利用者控えに記載されています)を手元に用意してください。プロバイダーに電話で問い合わせるか、ルーターの設定画面から確認することもできます... https://blog.friskit.me/2020/05/31/bjunicom-network.html

IPTVテレビボックスと聯通サーバー間の通信データを取得し、そのアドレスを入手しました。したがって、次のように直接使用できます:

github.com https://github.com/qwerttvv/Beijing-IPTV/blob/master/README.md https://github.com/qwerttvv/Beijing-IPTV/blob/master/README.md

しかし、ここで重要なポイントは、自宅のソフトウェアルーターのアドレスがこの親切な方のアドレス(192.168.123.1)と同じである必要があり、udpxyのポートを23234に変更することです。そうすれば、このアドレスを直接TV+に設定できます:

raw.githubusercontent.com https://raw.githubusercontent.com/qwerttvv/Beijing-IPTV/master/IPTV-Unicom.m3u https://raw.githubusercontent.com/qwerttvv/Beijing-IPTV/master/IPTV-Unicom.m3u

そうでなければ、このファイルの変更を自ら監視し、更新する必要があります。

ここでは、VercelにAPIサービスを10分でデプロイし、同時にVercelのCorn Jobsサービスを有効化しました。これにより、定期的に関数を実行して変更を検出できます。以下がコードです。あなたも自分でデプロイすることができます:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import type { NextApiRequest, NextApiResponse } from 'next';

type ResponseData = {
msg: string,
};

/**
* 该函数用来将网友通过 IPTV 盒子抓包获取的联通单播地址,转成自己的单播地址
* 该函数每天 3 点触发一次,定时检测网友的单播地址是否有更新,使用 vercel corn 任务进行
* TODO: 该函数未做鉴权,任何人都可以手动触发检测,为了防止滥用可以加上鉴权,但是 corn 似乎没这个功能
*/
export default function handler(
request: NextApiRequest,
response: NextApiResponse<ResponseData>
) {
// Note: 步骤
// 1. 获取网友通过监听盒子数据包抓取的(自己搞比较费劲,直接用现成的了)联通 IPTV 永久地址(rtp 协议的组播地址,多用户通用),获取其内容
// 2. 添加本地 udpxy 转发地址
// 3. 获取之前的 github gist 内容以对比二者
// 4. 有差异,则更新 github gist 内容
// 5. 没有,则不做操作
// Note: 环境变量,自己在 Vercel 中设置好
const token = process.env.GITHUB_TOKEN;
const gist = process.env.GIST_URL;
const id = process.env.GIST_ID;
return fetch(
'https://raw.githubusercontent.com/qwerttvv/Beijing-IPTV/master/IPTV-Unicom.m3u'
)
.then(async (res) => {
if (!res.ok) {
console.log('获取源地址异常');
return response.status(200).json({
msg: '获取源地址异常',
});
}
const src = await res.text();
// Note: 替换网友的本地单播地址为我的,其实你也可以将自己家的路由器网段设置成跟网友的一样(192.168.123.x),udpxy 端口转发设置成跟网友一样(23234),你就可以直接使用该地址了
const newGist = src.replace(
/http\:\/\/192\.168\.123\.1\:23234/g,
'http://192.168.5.2:4022'
);
response.setHeader('Content-Type', 'text/html; charset=utf-8');
// Note: 获取 gist 的 raw 内容,需要加个 cache-bust 否则每次请求会被缓存
return fetch(`${gist}?cache-bust=${Math.floor(Math.random() * 100000)}`, {
headers: {
Authorization: `Bearer ${token}`,
},
})
.then(async (pre) => {
const preGist = await pre.text();
// console.log('preGist:', preGist);
if (JSON.stringify(newGist) !== JSON.stringify(preGist)) {
// Note: 更新 Gist
const files = {
'IPTV.m3u': {
content: newGist,
},
};
return fetch(`https://api.github.com/gists/${id}`, {
method: 'PATCH',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'text/plain',
},
body: JSON.stringify({ files }),
})
.then((s) => {
console.log(
`更新成功: ${gist}?cache-bust=${Math.floor(
Math.random() * 1000000
)}`
);
return response.status(200).json({
msg: `更新成功: ${gist}?cache-bust=${Math.floor(
Math.random() * 1000000
)}`,
});
})
.catch((e) => {
console.log(`更新失败: ${e}`);
return response.status(200).json({
msg: `更新失败: ${e}`,
});
});
}
console.log(
`未变化: ${gist}?cache-bust=${Math.floor(Math.random() * 1000000)}`
);
return response.status(200).json({
msg: `未变化: ${gist}?cache-bust=${Math.floor(
Math.random() * 1000000
)}`,
});
})
.catch((e) => {
console.log(`获取自己的 gist 失败: ${e}`);
return response.status(200).json({
msg: `获取自己的 gist 失败: ${e}`,
});
});
})
.catch((e) => {
console.log(`获取别人的源失败: ${e}`);
return response.status(200).json({
msg: `获取别人的源失败: ${e}`,
});
});
}

Corn Jobs サービス設定:

1
2
3
4
5
6
7
8
{
"crons": [
{
"path": "/api/get",
"schedule": "0 15 * * *"
}
]
}

このファイルをプルした後に更新がある場合、gistファイルは自動的に更新されます:

gist.githubusercontent.com https://gist.githubusercontent.com/Xheldon/73bf97cb5ac5db2f5237264556b20951/raw/ea44694028a38baefff04ea46c02795e448d76f0/IPTV.m3u https://gist.githubusercontent.com/Xheldon/73bf97cb5ac5db2f5237264556b20951/raw/ea44694028a38baefff04ea46c02795e448d76f0/IPTV.m3u

このように、TV+ にこの gist アドレスをハードコードしておけば、ネットユーザーがこのアドレスを更新したときに自動的に更新されるようになります。

参考リンク

单线融合IPTV到家庭局域网最简单的方法:路由+桥接混合模式 目次 はじめに 基礎知識 ステップ1:光回線終端装置をブリッジモードに変更 ブリッジモードへの変更方法 ネットワーク構成の確認 ステップ2:Openwrt ルーター及び基本設定 インターフェースの設定 ゲートウェイホップ ステップ3:家庭ネットワークへのマルチキャストプロキシ マルチキャストプロキシ マルチキャストからユニキャストへの変換 ステップ4:IPTV コンテンツサービスネットワークを家庭ネットワークに統合 IPTVの使用... https://blog.lishun.me/iptvhelper-guide

光纤入户光猫改桥接+内网转发IPTV=任意设备看电视直播 - Botian's Blog 警告:この記事ではローカルネットワーク環境の変更について紹介します。一部の操作はネットワーク接続不能を引き起こす可能性があり、関連するネットワーク知識がない場合、修復が困難な場合や、ISPの技術者に助けを求める必要があるかもしれません。したがって、以下の内容は慎重に操作してください。注意:自宅ネットワークのPPPoE接続アカウントとパスワード(通常は契約時に渡されるユーザー控えに記載されています)を手元に用意しておくか、ISPに電話で問い合わせるか、ルーターの設定画面から該当する情報を確認してください... https://blog.friskit.me/2020/05/31/bjunicom-network.html

北京联通白嫖 IPTV 北京聯通はIPTVを開通していなくてもテレビのマルチキャストデータを受信できます。 この記事では、北京聯通IPTVを無料で利用し、家庭ネットワーク上の任意のデバイスでIPTVのライブストリームをスムーズに視聴する方法を紹介します。 https://www.haoyizebo.com/posts/6a0c2301/

- EOF -
この記事の初出: Apple TVで北京聯通IPTVを視聴する - Xheldon Blog