我想在接收器应用程序中使用TTML字幕URL更新SmoothStreaming chromecast播放器。 我的清单文件从一开始就不包含此URL,因此我需要添加它:
cast.player.enableCaptions(true, 'ttml', subtitleUrl);
我在播放器启动后立即执行此操作并将元数据加载到媒体元素(如其他帖子中所推荐的那样),但是在查看
时protocol.getStreamCount();
我只获得两个流:一个用于视频,一个用于音频。我看不到那里有标题的迹象。 我还尝试覆盖宿主对象中的清单信息(适用于许可证URL):
host.updateCaptionsRequestInfo = function (request){
requestInfo.url=subtitleUrl;
}
但是直到我调用enableCaptions函数才会调用此函数(并且只有在我添加第三个参数时才调用此函数,此时第三个参数是不必要的,因为它被updateCationsRequestInfo函数覆盖)。
有谁知道如何检查字幕请求是否被接受或拒绝,以及如何处理?不使用updateCationsRequestInfo()会更好,因为我可以在播放期间更改字幕。
问题可能是网址看起来不像是ttml链接(它是通过转换器传递的另一种格式)吗?
感谢您的帮助!
有关CORS的更新:
我在调用player.enableCaptions()之前记录了ttml-url,如果我按照url,我得到了ttml文件(响应头:Content-Type:text / xml和一些与CORS相关的头文件)。在谷歌开发工具中,我无法看到任何与player.enableCaptions()相关的内容,没有错误或成功消息。因此它与CORS问题无关。
答案 0 :(得分:0)
首先,当我拨打以下电话时,它对我有用:
window.mediaPlayer.enableCaptions(真,' TTML'' captions_styled.ttml&#39);
我的window.mediaPlayer是我的
实例new cast.player.api.Player(window.mediaHost);
和我的captions_styled.ttml托管在与我的接收器应用程序相同的服务器上,以避免CORS问题。
其次,这种添加标题的方式是通过外部文件。这与清单文件中规定的标题不同。这就是你的getStreamCount没有显示它的原因。
您可以通过调用以下方法禁用外部字幕:
window.mediaPlayer.enableCaptions(假,' VTT&#39);
请务必在重新装入媒体播放器之前调用window.mediaPlayer.unload()。
答案 1 :(得分:0)
我找到了出错的部分! 我的应用程序从一开始就正确设置了标题,当我查看
时document.getElementById('video').textTracks[0]
在开发工具中我看到它在那里(长度=== 1)。但它在“cues”键下没有任何内容,即没有从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 [0] .cues下有一个对象,即表示使用“hh:mm:ss.fraction”语法的标题的对象。另一个在加载到浏览器时丢失。这是否可能在将来支持chromecast?