在带有通信消息的 Styled Media Receiver Google Cast 上显示字幕

问题描述

我正在尝试在 Chromecast 上启动一个 mp4 流,该流也显示字幕(vtt 文件

我看到它被添加到本机库中。但是我找不到用于将其发送到接收器应用程序的有效负载消息。我没有使用 android 和 iOS 的本机库,而是使用负载消息而不是本机库的 Flutter 版本。 -> https://github.com/jonathantribouharet/flutter_cast

这是我已经尝试过的。

{
      'type': 'LOAD','autoplay': true,'currentTime': currentTime,'media': {
        'contentId': url,'contentType': 'video/mp4','streamType': 'BUFFERED','Metadata': {
          'type': 0,'MetadataType': 0,'title': title,'images': [
            {
              'url': posterUrl,}
          ],},'customData': {
        'cc': {
          'tracks': [
            {'src': 'https://gist.githubusercontent.com/samdutton/ca37f3adaf4e23679957b8083e061177/raw/e19399fbccbc069a2af4266e5120ae6bad62699a/sample.vtt'},],'active': 0
        },}

这是我的完整应用程序: https://github.com/vanlooverenkoen/flutter_cast_ui/tree/feature/cast-ui

但是自定义数据没有做任何事情。

我发现的所有 StackOverflow 问题都来自 2014 年。从那时起,应该可以通过 3 种文件格式使用 ClosedCaptions 或字幕:WebVTT、TTML 和 CEA-608。

本文档用于播放/暂停/停止实现:

我已经见过的 Stackoveflow 问题:

解决方法

我没有这方面的经验,但您可以查看 this repo。它使用 cpp 来做类似的事情,并提供了一种构建有效负载的方法,包括带有字幕链接的 text/vtt。 所以你可以用更多的数据扩展轨道对象

    msg["media"]["tracks"][0]["language"] = "en-US";
    msg["media"]["tracks"][0]["name"] = "English";
    msg["media"]["tracks"][0]["type"] = "TEXT";
    msg["media"]["tracks"][0]["subtype"] = "SUBTITLES";
    msg["media"]["tracks"][0]["trackId"] = 1;
    msg["media"]["tracks"][0]["trackContentId"] = yourSubtitleUrl;
    msg["media"]["tracks"][0]["trackContentType"] = "text/vtt";

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...