Chromecast 支持从 Reddit 投射视频吗? (HLS 和 Dash 视频)

2023-12-24

使用 URL 调用代理http://192.168.xx.xx:8080/3hyw7hwoajn21/HLSPlaylist.m3u8 http://192.168.xx.xx:8080/3hyw7hwoajn21/HLSPlaylist.m3u8使用 URL 调用代理http://192.168.xx.xx:8080/3hyw7hwoajn21/HLS_540_v4.m3u8 http://192.168.xx.xx:8080/3hyw7hwoajn21/HLS_540_v4.m3u8使用 URL 调用代理http://192.168.xx.xx:8080/3hyw7hwoajn21/HLS_AUDIO_160_K_v4.m3u8 http://192.168.xx.xx:8080/3hyw7hwoajn21/HLS_AUDIO_160_K_v4.m3u8使用 URL 调用代理http://192.168.xx.xx:8080/3hyw7hwoajn21/HLS_224_v4.m3u8 http://192.168.xx.xx:8080/3hyw7hwoajn21/HLS_224_v4.m3u8

下面是一个 Reddit 视频示例:https://www.reddit.com/r/me_irl/comments/b3vrs4/me_irl https://www.reddit.com/r/me_irl/comments/b3vrs4/me_irl

翻翻the JSON https://www.reddit.com/r/me_irl/comments/b3vrs4/me_irl/.json?raw_json=1,它有几个视频源选项:

"reddit_video": {
    "dash_url": "https://v.redd.it/3hyw7hwoajn21/DASHPlaylist.mpd",
    "duration": 76,
    "fallback_url": "https://v.redd.it/3hyw7hwoajn21/DASH_720?source=fallback",
    "height": 720,
    "hls_url": "https://v.redd.it/3hyw7hwoajn21/HLSPlaylist.m3u8",
    "is_gif": false,
    "scrubber_media_url": "https://v.redd.it/3hyw7hwoajn21/DASH_240",
    "transcoding_status": "completed",
    "width": 1280
}

虽然我似乎可以让其他 HLS/m3u8 视频与 Chromecast SDK 一起使用(例如Google 自己的 HLS 示例视频 https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/hls/DesigningForGoogleCast.m3u8),我似乎无法让这些来源中的任何一个发挥作用。

我试过了https://v.redd.it/3hyw7hwoajn21/HLSPlaylist.m3u8 https://v.redd.it/3hyw7hwoajn21/HLSPlaylist.m3u8将流类型设置为“实时”或“缓冲”,我尝试将内容类型设置为“application/x-mpegURL”,并且对破折号 URL 进行了相同的尝试https://v.redd.it/3hyw7hwoajn21/DASHPlaylist.mpd https://v.redd.it/3hyw7hwoajn21/DASHPlaylist.mpd内容类型“application/dash+xml”也无济于事。我发现这个问题 https://stackoverflow.com/questions/54534043/does-v3-google-cast-receiver-parse-alternative-audio-tracks-from-an-hls-master-p这似乎预示着某种可能性?

我还注意到 DASH 文件有一个单独的视频和音频流(https://v.redd.it/3hyw7hwoajn21/DASH_720 https://v.redd.it/3hyw7hwoajn21/DASH_720 and https://v.redd.it/3hyw7hwoajn21/audio https://v.redd.it/3hyw7hwoajn21/audio)最坏的情况是否有办法在 Chromecast 上播放视频流的同时播放单独的音频流?

Chromecast 无法播放这些视频类型吗?

UPDATE

Jesse 和 aergistal 认为这与缺少 CORS 标头有关。我构建了一个自定义接收器应用程序,以便能够获得更好的调试日志,这确实是(第一)问题; Chromecast 抱怨 CORS。

我使用 nginx 构建了一个本地反向代理,添加了所有 CORS 标头,然后我向 Chromecast 提供该代理 URL,此 CORS 错误就消失了。

但是,使用 HLS/m3u8 链接仍然无法进行流式传输。现在它抱怨以下内容:

[cast.player.hls.PackedAudioParser] ID3 和 ADTS 标头均未在 0 处找到

and

[cast.player.api.Host] 错误:cast.player.api.ErrorCode.NETWORK/315

and

[cast.receiver.MediaManager] 加载元数据错误:错误

完整日志:

这导致它仍然无法播放。有任何想法吗?

添加 CORS 问题允许加载 DASHPlaylist.mpd 变体(以前不会),这很好,但同时也不太好,因为反向代理要求您首先下载整个响应,以及 DASH URL 所在的位置只是整个 MP4(而 HLS 是字节范围),这意味着反向代理必须先下载整个 DASH 视频才能显示,这与 HLS 相比需要很长时间。

因此,由于速度原因,让 HLS 工作仍然是最佳选择,但是否由于 Chromecast 上的播放问题而注定无法工作?


具有独立音轨的 HLS 解决方案


根据最新日志中的信息,所选段格式与流中使用的实际格式不匹配。流使用AAC in MPEG-TS而 Cast SDK 尝试将其解析为打包音频。

A reply https://issuetracker.google.com/issues/70031250#comment17Cast 问题跟踪器上显示HlsSegmentFormat默认为MPEG2_TS如果流是多路复用的并且MPEG_AUDIO_ES否则。

针对 CAF 接收器的建议解决方案是拦截加载请求并使用以下命令覆盖段格式loadRequestData.media.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.TS。稍微修改一下的例子:

<html>
<head>
</head>
<body>
  <cast-media-player id="player"></cast-media-player>
  <script type="text/javascript" src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js">
  </script>
  <script>
    const context = cast.framework.CastReceiverContext.getInstance();
    const playerManager = context.getPlayerManager();
    // intercept the LOAD request
    playerManager.setMessageInterceptor(
        cast.framework.messages.MessageType.LOAD, loadRequestData => {
            loadRequestData.media.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.TS;
            return loadRequestData;
        });
    context.start();
  </script>
</body>
</html>

原始来源 https://issuetracker.google.com/issues/70031250#comment21

另一个例子 https://stackoverflow.com/questions/54534043/does-v3-google-cast-receiver-parse-alternative-audio-tracks-from-an-hls-master-p/54536239


CORS解决方案


The Google Cast 参考 https://developers.google.com/cast/docs/media为您提供解决方案:

如果您在 Cast 设备上播放流时遇到问题,则可能是 CORS 的问题。使用公开可用的CORS代理服务器测试您的流

公开可用的代理的问题在于,由于带宽问题,它们强制执行大小限制,因此您可以自己制作或使用开源代理。如果应用程序在移动设备上运行,您也可以将其设为本地服务器。

当前的流不受 DRM 保护。如果他们添加 CDN 身份验证或使用 DRM 保护流,这将变得更加复杂或完全不可能。


关于 CORS 标头,您必须确保支持预检请求:客户端可能会发送一个OPTIONS首先检查 CORS 支持(包括允许的方法和标头)。

您的流还必须支持 HTTP 范围请求,这意味着必须授权和公开适当的标头。

预检请求配置示例https://enable-cors.org https://enable-cors.org:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,POST,OPTIONS
Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range
Access-Control-Expose-Headers: Content-Length,Content-Range


您至少需要允许:GET, OPTIONS, the Content-Type and Range标头,并公开Content-Length,Content-Range。删除重复的标头(如果由远程服务器提供)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chromecast 支持从 Reddit 投射视频吗? (HLS 和 Dash 视频) 的相关文章

  • Chromecast – 从 Chrome 连接到其他设备会话

    Context 当从谷歌浏览器并使用会话监听器 https developers google com cast docs reference chrome chrome cast ApiConfig sessionListener可以加入
  • 通过向 Chromecast 设备提供 smoothstreaming 的 Manifest 文件来播放 Smoothstreaming URL

    我们希望通过向 Chromecast 设备提供 smoothstreaming 的 Manifest 文件来播放 Smoothstreaming URL 我们可以在 Chromecast 设备上播放以下内容 1 mp4文件 2 ismv 文
  • 在 iPhone/iPad 上保存 HLS 流

    我有一个 iPhone iPad 应用程序 可以播放电视频道的 HTTP 直播 我想添加录制功能以将直播流保存在设备上 就像电视录像机一样 我不知道是否可能 但我认为我有两种方法来录制流 保存屏幕上显示的输出流 但我不知道该怎么做 打开 m
  • 使用 OpenSSL 解密 .ts 文件

    一切都在同一个目录中 M3u8 文件 EXTM3U EXT X ALLOW CACHE NO EXT X TARGETDURATION 10 EXT X MEDIA SEQUENCE 0 EXT X KEY METHOD AES 128 U
  • 如何为网站启用 Chromecast?

    This article https support google com chromecast answer 3265953 hl en CA解释了 支持 Chromecast 的网站 的好处 更高的质量 支持 Chromecast 的网
  • 运行时异常 (Chromecast)

    我尝试配置 Chromecast 但收到 RuntimeException 并且不明白原因 Fabric 有日志 致命异常 java lang RuntimeException 无法启动活动 ComponentInfo activity T
  • 为什么 chromecast 客户端向接收器应用程序声明其高度和宽度为 720p?

    为什么 chromecast 向接收方应用服务器声明其客户端高度和宽度为 720p 我正在尝试显示非视频内容 并假设我能够使用完整的 1080p 分辨率 设备向电视报告其分辨率为 1080p 60hz 但如果您查看设备上的开发人员工具 它仅
  • 能否强制 AVFoundation 播放本地 .ts 文件?

    显然 AVFoundation 和 Quicktime X 可以解复用并正确播放编码 ts容器 因为 tsHTTPS 实时流媒体底层的容器 缺乏建立本地网络服务来服务 m3u8以及相关的 ts文件 我真的希望能够 说服AVURLAsset
  • 从AVPlayer获取HLS的PCM数据

    这个问题在过去几年里似乎被问过几次 但没有人回答 我正在尝试处理来自 HLS 的 PCM 数据 并且必须使用 AVPlayer 这篇文章利用了本地文件https chritto wordpress com 2013 01 07 proces
  • 对样式化媒体接收器 CSS 进行故障排除

    我正在尝试实现样式媒体接收器 但由于某种原因 我的 chromecast 不会显示图形 我只在黑色背景上看到我的接收者的名字 不过 在演员开发控制台中预览看起来还不错 我尝试使用的CSS是这样的 https krizan se styl l
  • 我应该如何在 ffmpeg 中使用破折号(不是 webm_dash_manifest!)格式?

    FFmpeg 有一种名为 dash 的格式 gt ffmpeg formats E dash DASH Muxer 这大概对应于 libavformat dashenc c 中的代码 我可以在网络上找到许多有关如何使用 WebM DASH
  • 发送器停止后让接收器继续运行

    我正在使用一个基于 Google 的简单接收器CastHelloText 示例应用程序 https github com googlecast CastHelloText chrome 当发送者断开连接时 我想允许接收者继续显示 我认为这可
  • 如何在 android 中从 Http 或 RTSP Url 流式传输视频

    我想在 android 上播放 Http 和 Rtsp 的视频 目前我正在尝试使用 http 链接 但是当我的活动开始时 它只是开始播放带有空白黑屏的音频 没有视频显示 我在下面发布了我的代码 感谢您提前提供的任何帮助 如果有人可以提供一个
  • Java mp4parser片段序列不连续性

    此用例是一项服务 手动将一系列未压缩的 wav 媒体片段编码为 m4s 片段 以便通过 MPEG DASH 广播 使用 ffmpeg 将 wav 压缩为 aac 并使用 sannies mp4parser 将 aac 音频组装为 m4s 片
  • 如何使用 apache 设置 mpeg dash 服务器?

    我想在 ubuntu 10 04 上设置本地 mpeg dash 服务器 那么分别安装apache和mpeg dash编码器后该怎么办呢 thanks 只需将 MPD 和破折号段放入 apache htdocs 文件夹即可 如果您的 MPD
  • 来自 http 直播 m3u8 文件的 FFMPEG mp4? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何从 http 直播 m3u8 文件中提取 mp4 我尝试了下面这个命令 ffmpeg i input file f rawvideo
  • 如何让 MediaRouteSelector 显示可用的 MiraCast 和 Chromecast 设备?

    我正在尝试让我的媒体路由选择器同时显示 MiraCast 和 Chromecast 设备 我有一个 Chromecast 接收器应用程序 并且还使用 Android 中的演示 API 因此理想情况下 用户只需单击媒体路由器按钮并选择他们拥有
  • MP4 到 DASH(bash 脚本)

    我有一个网站 用户可以在其中上传视频文件 我想使用 DASH 流式传输所有内容以获得自适应比特率流式传输 因此 我编写了一个 bash 脚本 由 cron 运行 将所有 mp4 文件转换为 DASH 但它无法正常工作 出了什么问题 例如 使
  • 适用于 iPhone 和 HTTP 直播的实时视频聊天

    所以一般来说 我想为 iPhone 制作一个具有视频聊天功能的应用程序 但经过多次搜索 我仍然找不到任何成功的结果 是否有任何公共或私有 API 可用于在 iPhone 上执行此操作 如果您的答案是 是 请帮助我 基本上 我想要的是读取连接
  • Android 屏幕共享编程(Root)

    在 Android gt 5 中 是否可以从 root adb shell 进行屏幕共享 而无需通过 miracast 或 chromecast 进行用户交互 我正在寻找启用 禁用此功能的命令https support google com

随机推荐