我想更新SmoothStreaming chromecast播放器,在我的接收器应用程序中带有一个TTML标题URL。我的清单文件从一开始就不包含这个URL,所以我需要添加它:
cast.player.enableCaptions(true, 'ttml', subtitleUrl);在播放器启动并将元数据加载到媒体元素(如其他帖子中所建议的)之后,我立即执行此操作,但在查看
protocol.getStreamCount();我只得到两个流:一个用于视频,一个用于音频。我在那里没有看到字幕的迹象。我还试图覆盖主机对象中的清单信息(这对于license url很好):
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问题无关。
发布于 2014-03-12 12:01:29
我发现出了问题!我的应用程序从一开始就正确地设置了标题,当我查看
document.getElementById('video').textTracks[0]在开发工具中,我看到了它的存在(使用length===1)。但是它在“提示”键下没有任何内容,即没有从ttml文件中加载任何内容。经过一些测试后,我发现问题在于在ttml文件中显示时间的语法。第一行工作,第二行不工作:
<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.cues下面有一个对象,它表示使用"hh:mm:ss.fraction“语法的标题。另一个在加载到浏览器时丢失。这是将来在chromecast上可能支持的东西吗?
发布于 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()。
https://stackoverflow.com/questions/22275295
复制相似问题