那個「正在執行」卻完全沒在動的串流

一套 24 小時全天候的居家攝影機轉 YouTube Live 的架構,看起來每個健康指標都正常,實際上卻連一個畫格都沒真的輸出過——以及等它真的動起來之後,YouTube API 生命週期裡藏的另一批 Bug。

This article is also available in English: English version——內容相同,僅語言不同。

容器是活的。Docker 這樣講的。沒有 crash,沒有一直重開的迴圈, log 裡也挑不出什麼稱得上是「錯誤」的東西。但這條串流卻完全、悄悄地是死的—— 不管它跑了多久,一個畫格都沒真的輸出過。「這個程序活著」跟「這個程序真的在做它該做的事」之間的落差, 後來才發現是整個故事的核心,而且發生了兩次:一次在編碼器裡, 另一次是再往上一層,在 YouTube Live API 自己的直播生命週期裡。

Bug #1:一個表現得像「完全沒問題」的時間戳記 Bug

整套架構是:一台居家攝影機的 RTSP 影像,經過 ffmpeg 重新編碼後, 以 RTMP 推流到 YouTube Live,用一個長時間存活的容器持續執行。 這套架構最早的版本,乍看之下完全沒問題——容器一直維持在啟動狀態, 沒有 crash-loop,也沒有 Docker 會標記成不健康的重開循環。 但實際上:從頭到尾沒有任何一個畫格真的被輸出過。不是「偶爾掉幀」, 也不是「斷線後會自己恢復」。是貨真價實的零輸出,容器活著多久就零輸出多久。

Unlock this article to keep reading, or subscribe for unlimited access to everything. See Pricing for details.