首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chromecast向平滑流清单添加TTML

Chromecast向平滑流清单添加TTML
EN

Stack Overflow用户
提问于 2014-03-08 21:25:38
回答 2查看 675关注 0票数 1

我想更新SmoothStreaming chromecast播放器,在我的接收器应用程序中带有一个TTML标题URL。我的清单文件从一开始就不包含这个URL,所以我需要添加它:

代码语言:javascript
复制
cast.player.enableCaptions(true, 'ttml', subtitleUrl);

在播放器启动并将元数据加载到媒体元素(如其他帖子中所建议的)之后,我立即执行此操作,但在查看

代码语言:javascript
复制
protocol.getStreamCount();

我只得到两个流:一个用于视频,一个用于音频。我在那里没有看到字幕的迹象。我还试图覆盖主机对象中的清单信息(这对于license url很好):

代码语言:javascript
复制
host.updateCaptionsRequestInfo = function (request){
    requestInfo.url=subtitleUrl;
}

但是在调用enableCaptions函数之前不会调用这个函数(并且只有在我添加第三个参数时才调用,此时第三个参数就没有必要了,因为它被updateCationsRequestInfo函数覆盖了)。

是否有人知道如何检查标题请求是否在某个地方被接受或拒绝,以及如何处理?最好不要使用updateCationsRequestInfo(),因为那时我可以在播放期间更改字幕。

问题是url看起来不像ttml链接(它是通过转换器传递的另一种格式)吗?

谢谢你的帮助!

关于CORS的更新:

我在调用player.enableCaptions()之前记录了ttml,如果我遵循url,就会得到ttml文件(响应头:Content: text/xml和一些与CORS相关的头)。在google工具中,我看不到任何与player.enableCaptions()相关的信息,没有错误或成功消息。因此它与CORS问题无关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-12 12:01:29

我发现出了问题!我的应用程序从一开始就正确地设置了标题,当我查看

代码语言:javascript
复制
document.getElementById('video').textTracks[0]

在开发工具中,我看到了它的存在(使用length===1)。但是它在“提示”键下没有任何内容,即没有从ttml文件中加载任何内容。经过一些测试后,我发现问题在于在ttml文件中显示时间的语法。第一行工作,第二行不工作:

代码语言:javascript
复制
<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文件:

代码语言:javascript
复制
<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>

这就是开发工具中出现的内容:

代码语言:javascript
复制
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.cues下面有一个对象,它表示使用"hh:mm:ss.fraction“语法的标题。另一个在加载到浏览器时丢失。这是将来在chromecast上可能支持的东西吗?

票数 0
EN

Stack Overflow用户

发布于 2014-03-12 00:32:59

首先,当我打电话时,它会对我起作用,比如:

Window.mediaPlayer.enableCaptions(真,'ttml','captions_styled.ttml');

我的window.mediaPlayer是我的实例

新cast.player.api.Player(window.mediaHost);

为了避免CORS问题,我的captions_styled.ttml被托管在与我的接收程序相同的服务器上。

其次,这种添加标题的方式是通过外部文件。这与清单文件中规定的标题不同。这就是为什么你的getStreamCount不显示它。

您可以通过以下方式禁用外部标题:

window.mediaPlayer.enableCaptions(false,'vtt');

在重新加载媒体播放器之前,一定要调用window.mediaPlayer.unload()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22275295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档