【问题标题】:Google Chromecast: Unable to cast video/mp4 with captions from iOS getting Load metadata errorGoogle Chromecast:无法使用 iOS 的字幕投射视频/mp4,出现加载元数据错误
【发布时间】:2015-01-25 21:59:31
【问题描述】:

我正在构建一个 iOS 应用,用于将视频内容从 DLNA/UPnP 媒体服务器投射到 Chromecast。当我为字幕添加媒体轨道数据时出现问题。以下作品:

### Media Manager - LOAD: {
"type":"load",
"I":false,
"defaultPrevented":false,
"kb":true,
"data":
{
    "currentTime":0,
    "requestId":3,
    "autoplay":true,
    "media":
    {
        "metadata":
        {
            "title":"movie.mp4",
            "subtitle":"Unknown",
            "images":
            [{
                "url":"http://192.168.1.15:8895/resource/625/COVER_IMAGE",
                "width":200,
                "height":100
            }],
            "metadataType":0
        },
        "textTrackStyle":
        {
            "windowRoundedCornerRadius":8,
            "windowType":"ROUNDED_CORNERS",
            "foregroundColor":"#FFFFFFFF",
            "fontFamily":"Helvetica",
            "fontGenericFamily":"SANS_SERIF",
            "fontStyle":"BOLD",
            "fontScale":1,
            "windowColor":"#000000FF",
            "backgroundColor":"#000000FF"
        },
        "contentId":"http://192.168.1.15:8895/resource/338/MEDIA_ITEM/AVC_MP4_MP_SD_AAC_MULT5-0/ORIGINAL",
        "contentType":"video/mp4",
        "streamType":"NONE",
        "duration":0
    }
},
"senderId":"33:3EA56D16-D18E-4D13-87A0-717DC188F8AF"}

但是当我添加自己的字幕或例如从 CastVideos 示例应用程序添加字幕时(以确保它启用了 CORS),它不适用于:

### Media Manager - LOAD: {
"type":"load",
"I":false,
"defaultPrevented":false,
"kb":true,
"data":
{
    "currentTime":0,
    "requestId":4,
    "autoplay":true,
    "media":
    {
        "tracks":
        [{
            "trackId":1,
            "trackContentId":"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/GoogleIO-2014-CastingToTheFuture2-en.vtt",
            "language":"en-US",
            "subtype":"CAPTIONS",
            "type":"TEXT",
            "trackContentType":"text/vtt",
            "name":"English Subtitle"
        }],
        "contentId":"http://192.168.1.15:8895/resource/338/MEDIA_ITEM/AVC_MP4_MP_SD_AAC_MULT5-0/ORIGINAL",
        "streamType":"NONE",
        "contentType":"video/mp4",
        "duration":0,
        "metadata":
        {
            "title":"movie.mp4",
            "subtitle":"Unknown",
            "images":
            [{
                "url":"http://192.168.1.15:8895/resource/625/COVER_IMAGE",
                "width":200,
                "height":100
            }],
            "metadataType":0
        },
        "textTrackStyle":
        {
            "windowRoundedCornerRadius":8,
            "windowType":"ROUNDED_CORNERS",
            "foregroundColor":"#FFFFFFFF",
            "fontFamily":"Helvetica",
            "fontGenericFamily":
            "SANS_SERIF",
            "fontStyle":"BOLD",
            "fontScale":1,
            "windowColor":
            "#000000FF",
            "backgroundColor":"#000000FF"
        }
    }
},
"senderId":"11:9D7D43C2-CD85-4143-82AA-2D0056AA62FC" }

我明白了:

[cast.receiver.MediaManager] Load metadata error cast_receiver.js:18 

但是,示例应用程序可以在我的自定义接收器中使用字幕,没有任何问题,而且我没有发现太大的区别(除了视频/图像 http URL,我只是收到警告):

### Media Manager - LOAD: {
"type":"load",
"I":false,
"defaultPrevented":false,
"kb":true,
"data":
{
    "currentTime":0,
    "requestId":3,
    "autoplay":true,
    "media":
    {
        "tracks":
        [{
            "trackId":1,
            "trackContentId":"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/DesigningForGoogleCast-en.vtt",
            "language":"en-US",
            "subtype":"CAPTIONS",
            "type":"TEXT",
            "trackContentType":"text/vtt",
            "name":"English Subtitle"
        }],
        "contentId":"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/DesigningForGoogleCast.mp4",
        "streamType":"NONE",
        "contentType":"video/mp4",
        "duration":0,
        "metadata":
        {
            "title":"Designing For Google Cast",
            "subtitle":"Google IO - 2014",
            "images":
            [{
                "url":"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images_480x270/DesigningForGoogleCast2-480x270.jpg",
                "width":200,
                "height":100
            }],
            "metadataType":0
        },
        "textTrackStyle":
        {
            "windowRoundedCornerRadius":8,
            "windowType":"ROUNDED_CORNERS",
            "foregroundColor":"#FFFFFFFF",
            "fontFamily":"Helvetica",
            "fontGenericFamily":"SANS_SERIF",
            "fontStyle":"BOLD",
            "fontScale":1,
            "windowColor":"#000000FF",
            "backgroundColor":"#000000FF"
        }
    }
},
"senderId":"46:F162E34A-1A6D-4C0C-A0A3-DB584C92CDF5" }

有什么想法吗?

提前致谢。

【问题讨论】:

  • 当你说它不起作用时,这是什么意思?请注意,当您添加字幕时,CORS 不仅成为字幕的要求,而且成为您的视频流的要求(即使它是非自适应的,如 mp4)。您需要解释您看到的问题以及来自控制台等的日志。
  • 它不起作用意味着它无法加载并且投射被中断。这很可能是因为视频流未启用 CORS。如何获得有关媒体加载的更详细错误?目前,来自 JS 库的“加载元数据错误”太简短了。视频流 (mp4) 由媒体服务器托管或在网络中可用,例如服务。有解决方法吗?由于我想翻译字幕并将它们挂在另一台服务器上,所以它将是跨服务器的。我无法将字幕添加到媒体服务器。什么时候总是需要字幕/字幕 CORS?
  • 如果您在接收器上打开登录,您应该能够看到 CORS 错误以及有关错误的更多信息。我认为您提到如果您将视频流指向我们示例中的视频流(因为具有 CORS 标头),那么相同的设置(即您的接收器 + 您的字幕)可以工作,对吗?您还可以验证您的流是否具有 CORS(例如,使用 curl -v ...)
  • 感谢您到目前为止的帮助。好的,问题已确定。提供视频的媒体服务器(例如 Serviio)不支持 CORS。使用示例应用程序视频和我在另一台服务器(具有 CORS)上的翻译字幕一起工作。是否有任何解决方法可以用于来自不支持 CORS 并且在 Chromecast 中有字幕的 http 服务器的视频,或者我无能为力?
  • 如果您有能力在 LAN 中运行本地服务器,您可以考虑运行代理服务器,以便一切都通过您的代理服务器,您可以在其中添加 CORS 标头。除此之外,您无能为力。

标签: chromecast google-cast


【解决方案1】:

在 Chromecast 中使用字幕时,不仅字幕需要 CORS,视频流也需要 CORS。在我的情况下,视频 HTTP 服务器(例如 Serviio)不支持它。

【讨论】:

    猜你喜欢
    • 2016-03-02
    • 2017-08-29
    • 2014-10-30
    • 2015-07-25
    • 2014-07-13
    • 2014-03-13
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多