1

レシーバー アプリケーションで TTML キャプション URL を使用して SmoothStreaming chromecast プレーヤーを更新したいと考えています。私のマニフェスト ファイルには最初からこの URL が含まれていないため、次のように追加する必要があります。

cast.player.enableCaptions(true, 'ttml', subtitleUrl);

プレーヤーが起動し、メタデータがメディア要素にロードされた直後にこれを行います(他の投稿で推奨されているように)が、

protocol.getStreamCount();

ビデオ用とオーディオ用の 2 つのストリームしか取得できません。そこにキャプションの兆候は見られません。また、ホスト オブジェクトのマニフェスト情報をオーバーライドしようとしました (これはライセンス URL に適しています)。

host.updateCaptionsRequestInfo = function (request){
    requestInfo.url=subtitleUrl;
}

しかし、この関数は、enableCaptions 関数を呼び出すまで呼び出されません (3 番目の引数を追加した場合にのみ呼び出されます。その時点で、updateCationsRequestInfo 関数によって上書きされるため、3 番目の引数は不要です)。

キャプションリクエストがどこかで受け入れられたか拒否されたかを確認する方法と、これを処理する方法を知っている人はいますか? 再生中に字幕を変更できるので、 updateCationsRequestInfo() を使用しない方がよいでしょう。

問題は、URL が ttml リンクのように見えないことでしょうか (これはコンバーターを介して渡される別の形式です)。

お手伝いありがとう!

CORS に関する更新:

player.enableCaptions() を呼び出す直前に ttml-url をログに記録し、その URL をたどると、ttml ファイル (応答ヘッダー: Content-Type: text/xml およびいくつかの CORS 関連ヘッダー) を取得します。Google 開発ツールでは、player.enableCaptions() に関連するものは何も表示されません。エラーや成功メッセージはありません。したがって、CORSの問題には関係ありません。

4

2 に答える 2

0

ダメだった部分を発見!私のアプリケーションは最初からキャプションを正しく設定していました。

document.getElementById('video').textTracks[0]

開発ツールでは、そこにあることがわかりました(長さ=== 1)。しかし、「cues」キーの下には何もありませんでした。つまり、コンテンツが ttml ファイルから読み込まれませんでした。いくつかのテストの後、ttml ファイルに時刻を表示する構文に問題があることがわかりました。最初の行は機能しますが、2 番目の行は機能しません。

<p begin="00:00:05.83" end="01:00:15.00"></p>
<p begin="8.0s" end="1000.0s"></p>

私が理解しているように、両方の形式が ttml 形式 ( http://www.w3.org/TR/ttaf1-dfxp/#timing-value-timeExpression ) でサポートされています。これは chromecast ブラウザでサポートされていないか、ttml 時間構文の仕組みを見逃しているようです。

テスト参照用の TTML ファイル:

これは、問題の場所を確認するときに使用したテスト TTML ファイルです。

<tt xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling" xmlns="http://www.w3.org/2006/04/ttaf1">
<head>
  <styling>
  <style id="defaultCaption" tts:fontSize="24" tts:fontFamily="Arial" tts:fontWeight="normal" tts:fontStyle="normal" tts:textDecoration="none" tts:color="white" tts:backgroundColor="black" tts:textAlign="center"/>
  </styling>
</head>
  <body style="defaultCaption" id="thebody">
    <div>
    <p begin="00:00:05.83" end="01:00:15.00">
      <metadata ccrow="0" cccol="15"/>
      On screen for 10 sec
    </p>
    <p begin="8.0s" end="1000.0s">
      <metadata ccrow="5" cccol="15"/>
      CCROW 8 COL 15 for 5 sec
    </p>
    </div>
  </body>
</tt>

そして、これが開発ツールで思いついたものです:

document.getElementById('video').textTracks[0]
  > TextTrack {oncuechange: null, activeCues: TextTrackCueList, cues: TextTrackCueList, mode: "showing", language: ""…}
    >  activeCues: TextTrackCueList
    >  cues: TextTrackCueList
      >  0: TextTrackCue
     length: 1
      >  __proto__: TextTrackCueList
       kind: "captions"
       label: ""
       language: ""
       mode: "showing"
       oncuechange: null
    >  __proto__: TextTrack

キー textTracks[0].cues の下に 1 つのオブジェクトがあり、それは "hh:mm:ss.fraction" 構文を使用するキャプションを表すオブジェクトです。もう 1 つは、ブラウザにロードすると失われます。これは将来、chromecast でサポートされる可能性がありますか?

于 2014-03-12T12:01:29.967 に答える