IPTV - ネットでテレビを視聴する

(2024-09-01)

2年ほど前にケーブルテレビを解約しました。

地デジの番組コンテンツがあまりにも貧弱で、特にバラエティ番組はほとんど見ることがなくなったからです。

思えば、60数年前に我が家にテレビがやってきた時は本当に感動しました。 もうすぐ小学生という時期だったと思いますが、素晴らしい文明の機械がウチにもやってきたと思いました。

以来、テレビはほとんど付けっぱなしで、テレビのない世界は考えられないと思っていました。

でも、最近の地デジの番組内容に対してウンザリするようになってきて、そういう時は酒を飲みながら環境ビデオを見たり、料理しながらジャズを聴くようになりました。 あまり聴いたことのないジャズを流しておくと、邪魔にならずとても心地よい時間が流れる気がします。

そうして、テレビのない世界に1年ほど居たのですが、やはり台風の大雨情報などはリアルタイムのテレビが最もわかりやすいので、ネットでのテレビを視聴するようになりました。

IPTV

m3u8 ファイルというものがあります。

これは、おそらくストリーミングを実行するためのプレイリストなのだと思います。

大事なことは、この m3u8 ファイルの url がわかっていると、JavaScript を使ってリアルタイムでテレビを見ることができるということです。 その方法は簡単ではありませんが、わかってしまえばたった数行のプログラムでできてしまいます。

ただし、この方法によると、BS放送もCS放送も閲覧できてしまいます。
本来、有料サイトが閲覧できてしまうのはいかにも怪しい感じがします。

しかし、解像度がやや低く、画像の質はとてもテレビには及びません。

閲覧方法や m3u8 の url をここに提示することはできませんが、ネット検索をすればすぐにわかると思います。

python による録画

最初はニュースだけのつもりでしたが、NHK BS などは割といい映画を放送したりします。

であれば、録画してライブラリに保存しておきたいと思いました。 暇な時に映画を見ることがあるかもしれないからです。

python を使うと録画をすることができます。

import urllib.request
import m3u8
import os
def dn():
playlist = m3u8.load('https://hoge')
for i, segment in enumerate(playlist.segments):
# tsファイルのパス
uri = segment.absolute_uri
print(uri)
object_name = '/home/user/iptv/NHKBS/ts/' + uri[uri.rfind('/') + 1:]
print(object_name)
urllib.request.urlretrieve(uri, object_name)
if __name__ == '__main__':
dn()

このプログラムを実行すると、10 秒間の ts ファイルを 6 個ダウンロードすることができます。

cron で予約

python プログラムはサーバーエラーが割と頻繁に起こるので、10 秒ごとに実行するように cron 設定します。

* 18 * * 6 for i in `seq 0 10 59`;do (sleep ${i}; /volume1/bak/iptv/shell/Italy.sh) & done;

これは NAS 上の cron 設定です。

cron の意味は、毎週土曜日の 18 時から 1 時間実行されます。
ここでは、シェルスクリプトを実行していますが、python を直接実行することもできます。

シェルスクリプトで merge

10 秒単位の ts ファイルを merge して一つの mp4 ファイルを作成します。

#!/bin/sh
rm -r ./temp/*.*
for i in `\find ts -maxdepth 3 -a -xtype f -a -name "*.ts" | sort`; do
echo file "'$i'"
done > list.txt
ffmpeg -f concat -i list.txt -c copy ./temp/`date +%Y%m%d_`.ts
for file in ./temp/*.ts; do
echo $file
faname_ext="${file##*/}"
fname="${faname_ext%.*}"
ffmpeg -i $file -c:v copy -c:a copy ./mp4/$fname.mp4
done

このシェルスクリプトが動くためには ffmpeg が必要です。

HD から 1 K に

これまでは ts ファイルは 10 秒間で 3 MB くらいでした。 その画質は横が 1280 px の HD でした。

しかし最近、3 MB から 2 MB に変更されてしまいました。調べてみると解像度の横が 1024 px になっています。 これは 1 K です。更に解像度が落ちました。

なぜ変更されたのかはよくわかりません。

でも、元々は緊急的なテレビを見ることが目的なのでこれでいいような気もします。