︿
Top

Jellyfin (五) 隨選視訊的電視直播


隨著近十年來 IPTV 技術的崛起,隨選視訊(MOD / Multimedia on Demand)或是 OTT(Over the top)已經改變了人們閱讀大眾媒體的方式,我們這一代人感覺更自由了,不再是有線電視(第四台)讓你吃什麼你就得吃什麼!重點在於我們有了「選擇」。

現在的 Jellyfin 正是讓我們在這個時代擁有了自由選擇媒體的權利,我們從 Jellyfin 裡隨選想要觀看的電影、電視劇,那麼有線電視呢?工作辛苦了一整天,我回家不想費腦挑片了,我就想有人幫我安排好相關的影視節目,讓我像個肥宅一樣的癱坐在沙發上看電視,很好!Jellyfin 的電視直播功能補上了這最後一塊的視聽拼圖,讓你家中如有中華電信 MOD 般的隨選電視台!




IPTV 與 OTT

Jellyfin 的電視直播主要基於影音串流來源和電子節目指南(EPG / Electronic program guide),要了解如何建立 Jellyfin 的電視直播,首先我們要先釐清什麼是 IPTV 和 OTT,這兩個東西其實很相近,基本就是站在大包大攬的傳統第四台的對立面,主打可以自由選擇所需頻道或是影音內容,差別在於 IPTV 是透過電信公司提供的自有寬頻上網為基礎向用戶傳遞數位電視服務(比如中華電信MOD、凱擘大寬頻、中嘉寬頻),而 OTT 則是透過網際網路向用戶提供媒體串流的服務,相比 IPTV 其並不受到用戶所屬電信寬頻渠道的限制,比如 Netflix、Disney+或是一些善心人士在網路上提供的電視影音串流來源…等皆屬於 OTT 的範疇,只是在電視媒體網路化的理解上普羅大眾對於 IP 和 TV 這兩個名詞是比較而熟能詳的,所以反而和 Jellyfin 電視直播相關的資源大部分是透過「IPTV」這個關鍵字來查找的。




打造你的免費第四台

先不考慮媒體內容的授權費用、任何影音串流的供給方都需要支付一筆不小的上傳頻寬費用才得以讓用戶們下載收看,這代表著天下沒有免費的午餐,如果你有緣找到了善心人士提供的電視影音串流源,你各位且看且珍惜啊!

哥爾羅傑在被處死前曾經說過,想要電視直播源嗎?想要的話就都給你們吧!去找吧!大秘寶都放在了「github」,懂得都懂!我不多說以免 One Piece 被大家玩爛囉~


前往控制台的「電視直播」新增「電視解碼器裝置」


電視解碼器類型選擇「M3U Tuner」,然後貼上我們剛剛在 One Piece 找到的 m3u 電視直播源,其他設置都保持預設然後點選保存離開


接著新增「節目表提供者」,選擇「XMLTV」方式匯入電子節目表(EPG)


回到首頁,可以看到電視牆已經新增了電視直播的媒體庫


進入電視直播的「頻道」,目前我私人的直播源一共提供了56個頻道


隨便點進一個頻道看看,測試無誤,採用的是 HLS 轉檔串流





電視排程錄影

進入電視直播的「指南」,這時候我們先前匯入的 EPG 就派上用場了,一般製作的 EPG 大概會有一週的效期,我們可以從指南裡找到需要預約錄影的時段與節目,然後排程錄影


點擊東森新聞下午三點即將播映的「東森大社會」節目,點選「開始錄影」


進入電視直播的「排程」,可以看到我們剛剛預約錄影的節目已在排程列表裡


稍晚錄影成功後,前往首頁媒體庫的「Recording」裡找到預約錄影的影片


由於 EPG 的關係,甚至連錄影的影片也包含了節目片名、集數與劇情簡介






技術深挖和一些疑難排解

目前主流的電視直播源多是以 M3U 的格式提供,頭部「#EXTM3U」為必要的第一行宣告,後續以「#EXTINF」連接著頻道相關定義並帶著下一行媒體源地址表示為一組頻道來源,一個 M3U 檔案可以紀錄多個頻道,比如以下範例,我們可以更改頻道顯示圖片、頻道名稱、群組名稱或是直播源地址以建立自己專屬的電視頻道清單

#EXTM3U
#EXTINF:-1 tvg-name="CCTV1" tvg-id="CCTV1" tvg-logo="https://live.gogoloo.com/tv/CCTV1.png" group-title="央視頻道", CCTV1
http://160.210.100.XX:35X2/tsfile/live/0001_1.m3u8
#EXTINF:-1 tvg-name="CCTV2" tvg-id="CCTV2" tvg-logo="https://live.gogoloo.com/tv/CCTV2.png" group-title="央視頻道", CCTV2
http://158.221.214.XX:9X01/tsfile/live/0002_1.m3u8
#EXTINF:-1 tvg-name="CCTV3" tvg-id="CCTV3" tvg-logo="https://live.gogoloo.com/tv/CCTV3.png" group-title="央視頻道", CCTV3
http://119.163.199.XX:99X1/tsfile/live/0003_1.m3u8
#EXTINF:-1 tvg-name="ETTV1" tvg-id="ETTV1" tvg-logo="https://live.gogoloo.com/tv/ettoday.png" group-title="電影", 東森戲劇台
http://219.159.194.XX:X181/tsfile/live/0004_1.m3u8

而 EPG 配合 M3U 才是電視直播最完美的打開方式,無奈台灣並沒有人去整合這項資源,網路上能找到的大多是大陸或是歐美的頻道節目表,即便取得了正確對應 m3u 頻道的電子節目表,也可能發生時區對不上的問題,這裡我們來說說關於 EPG 的文件格式,EPG 是一種 XML檔案,以下範例是從國外找到的電子節目表,這邊著重在「 display-name」標籤,它主要對應 m3u 檔案裡 EXTINF 行末配置的頻道名稱,兩者必須相符才能正確顯示電子節目表與其內容,programm 標籤則聲明了節目的開始與結束時間,並包含了節目名稱和劇情簡介

<channel id="368788">
    <display-name lang="TW">三立戲劇台HD</display-name>
    <icon src="https://gogoloo.com/media/images/epg/2024/03/09/20240602115840579132_36.png" />
  </channel>
  <channel id="379267">
    <display-name lang="TW">東森戲劇台</display-name>
    <icon src="https://epg.pw/media/images/epg/2024/03/11/20240621151230908202_34.jpg" />
  </channel>
  <channel id="368794">
    <display-name lang="TW">靖天戲劇HD</display-name>
    <icon src="https://gogoloo.com/media/images/epg/2024/03/09/20240609115928574420_20.png" />
  </channel>
<programme channel="379267" start="20241202130000 +0000" stop="20241202140000 +0000">
    <title lang="zh">回到18歲</title>
    <desc>一對婚姻破裂邊緣的中年夫婦,鄭多靜(金荷娜 飾)是兼顧事業與家庭的媽媽,一邊忙於主播的工作,也要照顧孩子,而丈夫洪大英>(尹相鉉 飾)卻是遭到公司解僱、被孩子們無視的中年大叔。</desc>
    <date>20241202</date>
    <audio>
      <stereo>stereo</stereo>
    </audio>
  </programme>
  <programme channel="379267" start="20241202140000 +0000" stop="20241202150000 +0000">
    <title lang="zh">皇后的品格</title>
    <desc>音樂劇演員吳珊妮(張娜拉 飾),夢想能成為主演,現實生活中卻是專門填補空缺的小演員。李赫(申成祿 飾),對大韓帝國的經濟
發展有著巨大貢獻,是一個備受國民尊敬的魅力超群的皇帝。國民灰姑娘飛上枝頭,珊妮成為李赫的繼后,無奈他風流倜儻,身邊女人不斷,更忘
不了已故皇后。珊妮慢慢發現夫君和皇室的真面目,難過又絕望的她,選擇踏上復仇之路?</desc>
    <date>20241202</date>
    <audio>
      <stereo>stereo</stereo>
    </audio>
  </programme>

以我們拿到的這份 EPG 為例,雖然節目時間正確了,但時區並不符合台灣的需求(UTC+8),直接服用會造成所有的電視頻道都會顯示錯誤的節目資訊,以下提供簡易的時區修改 script,可以放在 crontab 裡定時修改最新的電子節目表

wget https://gogoloo.com/xmltv/epg.xml --no-check-certificate -O /tmp/epg.xml
sed -e 's/+0000/+0800/g' -i /tmp/epg.xml

前面幾篇我們著重提到了服務端與客戶端播放器的解碼適配性問題,這點在電視直播也很容易造成困擾,舉例我們以手機為觀影裝置時,由於我們推薦的 EXO Player 原生不支援 rtmp 串流,如果在你的直播清單裡有除了 m3u 以外的 rtmp 源,那麼用戶端設定可能要考慮改用「網頁播放器」以避免崩潰,無獨有偶在 TV 版也有同樣的問題,在電視直播時預設不開啟轉檔,這可能會導致影音串流端和客戶端播放器不能匹配導致崩潰的狀況發生,這時需要到「設定」裡取消勾選 「串流電視直播」(重播 > 高級回放偏好)







結語

Jellyfin 雖然可以使用各種客戶端來進行瀏覽,但電視直播顧名思義還是在電視上看是最對味的,比如使用 Jellyfin for Android TV 版本的客戶端 APP 在電視上觀影,就可以享受到手持遙控器漫無目轉台的快樂,同時 TV 版本也針對電視直播有各方面的細節優化,像是選台邏輯、節目表與電視播放二合一的子母畫面等等,如果你有嘗試過其它電視直播工具,其實 Jellyfin 的播放效率可能是最差的,這是因為 Jellyfin 的客戶端播放器需要適配各種影音來源、無法做到只針對直播串流片源去做優化,但它強在真正意義上的跨平台與統包媒體入口,讓一個 Jellyfin 滿足你所有的視聽需求!

至此,Jellyfin 系列文章已連發五彈,期望能夠覆蓋到多數人的多媒體應用場景,但其實 Jellyfin 能做的還不僅於此,比如動漫、電子書庫、音樂串流等也不在話下,後續有機會再給大家介紹。





tomy

來自台灣的系統工程師,一直熱衷於 Open source 相關技術的學習、建置、應用與分享。

  • Image
  • Image
  • Image
  • Image
  • Image

0 Comments:

張貼留言