[Twitch API 系列 2] 陳年問題!解決 Twitch 直播嵌入網頁無法顯示轉播的問題

解決嵌入網頁的 Twitch 頻道無法顯示轉播內容的問題


在我們將 Twitch 頻道嵌入網頁後,看似可轉播任何頻道最新開始的直播內容
然而,當頻道啟動「轉播模式」時,卻發現網頁內的 Twitch 窗框顯示離線?
本文帶您走過沉睡已久的設計缺陷、翻開陳舊的一頁頁斷簡殘片,探討問題的幾個解決思路




先講結論

關於解決方法,調查並歸納出幾種作法,分享如下:


這種作法理論上會找有上線的頻道播
但請注意當兩個頻道同時上線時,不確定會照什麼標準(例如熱門度或其他標準)挑一個播,待要花時間嘗試


原理是將頻道與被轉播的頻道的 ID 都編入網頁
但此做法會牽涉到嵌入的網站的設計,是否原本就設計前、後台讓人填目標 ID
又或者你寫的網頁有能力一直去問目前頻道轉播的目標 ID 是誰,不過像這種問 ID 的操作,應需看有沒有官方 API 支援


理論上當頻道帳號登出所有裝置,設定好的轉播可以被鑲嵌上去的網站所播出
但一來沒人確定這個bug是否被修掉,二來即使未修也不確定何時官方動刀,三來這會造成管理不便,因此綜上所述這非長久之計

這次就不寫範例了,如果大家有試成功的也歡迎回報一下


猜想

個人猜想這個問題是有解的
在本系列文1時曾經做過範例網站,當時剛 load 進網頁時,有時候 load 比較久,會有一瞬間可辨識到 Twitch 格子內顯示轉播的標題、內容,但這一瞬間很短,下一秒隨即會改顯示為離線
所以雖然證據尚不明朗,但可推測無法顯示轉播有可能是官方有意為之,或基於某種理由不得不限制它


問題緣起

這個問題蠻有歷史的,所以帶大家看看過往史料(?)

2016 年 11月 28 日,那是個大雨過後的下午,有個人在 Reddit r/Twitch/ 版發了一篇 Embedded twitch channel shows "offline" when hosting 的文章,他說想將自己的頻道當作「hostlist」(host 就是英文中「轉播模式」的意思),讓鑲嵌自己頻道的網站可以播出所有他轉播的頻道,文中附上一串標準的鑲嵌語法

他未必是最早發現這問題的人,但顯然他引起 Twitch 相關人士的注意並得到回應:


追朔文章裡面最後的結論是用 array("") 將來源及目的頻道都包進去,如果有多個轉播頻道則會以熱門度決定轉播誰,然而當年的連結已經死檔,所以無從驗證

這些年來,這個問題仍不斷被人提起,留下不少文章記錄

在 2020 年我們仍能在 Twitch 開發者論壇找到 Integration of a live hosting on a website 這樣的問題,看起來官方是沒有打算開放支援的意思

我想,技術上的原因在於:

1. 鑲嵌 API 服務的是頻道本身的 Stream,所以只看你的頻道有沒有上線
2. 轉播模式下,你的頻道會被強制下線,所以鑲嵌 API 就會當作你沒在播東西

也許合理,但設計上來說不太合情(人性),畢竟轉播也是一個頻道提供內容的一種方式,而嵌入的 API 忽略了這點。不是要責備這一點,不過 Twitch 官方在開發文件上沒有寫清楚 Host 會怎樣也是不爭的事實:


截圖可看出,在官方 API 文件搜尋「host」,基本上在嵌入 API 的文章,沒有一篇有提到這字眼;而嵌入 API 號稱有三種方式:

1. Embed 影片/剪輯 
2. Embed 聊天 
3. Embed Everything

看來這個「Everything」,下的是有點太過自信了

Twitch API 文件也有寫得好的地方,例如例子給得很明確,對於同一件事也有提供不同做法,例如嵌入可以透過 iframe 或 Java Script 做到,這點固然必須給予肯定

然而,個人淺見,Twitch 這麼大的平台,也屬於開發者熱衷接入的線上串流服務,不想支援是沒關係,關於嵌入的章節,API 文件寫法確實有點誤導,而且關鍵的「不支援 Host」這件事隻字不提,無端浪費開發者很多時間



科技出自於人性,但開發者往往會淡忘人性,也許這就是人性吧

沒有留言:

張貼留言