YouTube は、 ebu-stl などの一部のバイナリ キャプション ファイル形式をサポートしています。
Web インターフェイス経由でアップロードすると、正常にアップロードおよび処理される *.stl ファイルがあります。しかし、API v2 経由で POST リクエストでアップロードしようとすると、ファイル形式が正しく認識されないようです。POST リクエストは次のようになります。
POST /feeds/api/videos/VIDEO_ID/captions HTTP/1.1
Host: gdata.youtube.com
Content-Type: application/vnd.youtube.timedtext; charset=UTF-8
Content-Language: en
Slug: Title of caption track
Authorization: Bearer ACCESS_TOKEN
GData-Version: 2
X-GData-Key: key=DEVELOPER_KEY
<Caption File Data>
これは、API 経由でアップロードされた *.stl ファイルが Web サイトでどのように見えるかです。読み取り可能なテキストを含む行がいくつかあるはずです。
同じコードで utf8 プレーン テキストの字幕ファイル (*.vtt など) をアップロードすると、すべて正常に動作します。さらに、stl ファイルを Web インターフェイス経由で 1 回、API 経由で 1 回アップロードし、後で API 経由で両方のファイルを取得すると、それらはバイト単位で一致します。
私にはエンコーディングの問題のように見えます.youtubeはファイルを正しく受け取りますが、おそらくバイナリファイル全体をUTF-8として解析します. ただし、 charset=またはContent-Language のいずれかを省略すると、YouTube は 4xx エラーで応答します。
バイナリ キャプション ファイルをアップロードすることはできますか? 無理な場合もご確認いただけますと幸いです。
自分で試してみたい場合は最小限の stl ファイル (16 進ダンプ)。(ルビー)としてそれを読んでください:
stl = hex.chars.each_slice(2).map{|x|x.join.to_i(16)}.pack('C*')