谷歌 Chromecast 字幕不起作用

Posted

技术标签:

【中文标题】谷歌 Chromecast 字幕不起作用【英文标题】:Google Chromecast subtitle not working 【发布时间】:2016-12-21 13:52:27 【问题描述】:

我有这个代码

var englishSubtitle = new chrome.cast.media.Track(2,chrome.cast.media.TrackType.TEXT);
englishSubtitle.trackContentId = 'english.vtt';
englishSubtitle.trackContentType = 'text/vtt';
englishSubtitle.subtype = chrome.cast.media.TextTrackType.CAPTIONS;
englishSubtitle.name = 'English';
englishSubtitle.language = 'en-US';
englishSubtitle.customData = null;
var tracks = englishSubtitle;

var mediaInfo = new chrome.cast.media.MediaInfo(app.streamState_.manifest);
mediaInfo.contentType = app.streamState_.type;
mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();
mediaInfo.customData = null;
mediaInfo.streamType = chrome.cast.media.StreamType.BUFFERED;
mediaInfo.textTrackStyle = new chrome.cast.media.TextTrackStyle();
mediaInfo.tracks = tracks; 
mediaInfo.metadata.metadataType = chrome.cast.media.MetadataType.GENERIC;

var activeTrackIds = [2];   

var request = new chrome.cast.media.LoadRequest(mediaInfo);
request.autoplay = true;
request.currentTime = 0;
request.activeTrackIds = activeTrackIds;
session.loadMedia(request,onMediaDiscovered.bind(   this, 'loadedMedia'),  onMediaError);

我想在 chromecast 上显示字幕。当我想在请求上设置 activeTracks 时,我收到一个错误 对象代码:“session_error”,描述:“INVALID_PARAMS”,详细信息:对象 由于该错误,它没有显示字幕,并且根本没有播放视频。 我做错了吗?

【问题讨论】:

Google cast 文档 => activeTrackIds Array of number 应该处于活动状态的 Track TrackIds 数组。如果未提供阵列,则默认轨道将处于活动状态。如果提供了两个不兼容的 trackId(例如两个活动的音轨),该命令将失败并显示 INVALID_PARAMETER。 (developers.google.com/cast/docs/reference/chrome/…) 我阅读了文档,但我无法理解我做错了什么。因为我发送了一个trackid,也就是text 教程中,字幕子类型为chrome.cast.media.TextTrackType.SUBTITLES 我也尝试了 SUBTITLES,但它不起作用 【参考方案1】:

tracks设置时应该是一个数组

mediaInfo.tracks = tracks;

在你的情况下,你应该尝试

var tracks = [englishSubtitle];

如前所述,使用 SUBTITLES 而不是 CAPTIONS。最后确保您的网络服务器中存在 CORS 标头,即使您使用的是 mp4。

【讨论】:

【参考方案2】:

tracks 应存储在数组中https://developers.google.com/cast/docs/reference/chrome/chrome.cast.media.MediaInfo#tracks 非空 chrome.cast.media.Track 数组 Track 对象数组。

mediaInfo.tracks = [englishSubtitle, frenchSubtitle, germanSubtitle]

我为 chromecast SDK 创建了一个简单的 javascript 包装器:https://github.com/Fenny/ChromecastJS

如果您偶然发现更多问题,可能值得一试,祝您好运!

【讨论】:

以上是关于谷歌 Chromecast 字幕不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Chromecast 调试不起作用

Chromecast 自定义命令不起作用

当我从控制器创建单独的类时,Chromecast 监听器不起作用

UITableViewCell 样式字幕多行不起作用

Android Chromecast:调用 messageStream.playFrom(position) 在 MediaProtocolCommand onCompleted 中不起作用

MediaPlayer 的字幕功能不起作用(SRT 文件)