【问题标题】:Android HLS video mime typeAndroid HLS 视频 mime 类型
【发布时间】:2012-02-29 00:04:05
【问题描述】:

我想触发一个 Intent 来播放 HLS(HTTP 直播流)视频。

我应该在类型字段中输入什么来仅触发支持 HLS 的视频播放器?

我尝试了不成功以下:

video/m3u

video/m3u8

video/hls

application/x-mpegURL

vnd.apple.mpegURL

video/MP2T

application/vnd.apple.mpegurl

请出主意...

【问题讨论】:

  • 这个问题与 Android 3.0+ 有关,应该支持 HLS。
  • 我可以使用 mimetype 'video/*' 成功播放 HLS,但也可以触发其他不支持 HLS 的播放器,这会导致崩溃和死机。
  • 我找不到任何关于 HLS(HTTP Live Stream)mime 类型的文档,除了:developer.apple.com/library/ios/#documentation/…
  • 最终,我使用了“video/mp4”——根据我的测试,它给出了足够好的结果,因为根据我的经验,很多处理“video/mp4”的播放器也可以处理 HLS .

标签: android android-intent video-streaming mime-types http-live-streaming


【解决方案1】:

应该输入 RFC 中指定的 Content-Type 类型:application/vnd.apple.mpegurl。请参阅https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-08 的第 3.1 节

Android 对 HLS 的支持极差。您将需要在许多设备上使用一些第三方软件,尤其是对于版本低于 3 的版本。Google 似乎并不在意,或者至少不关心回归测试。

【讨论】:

  • 正如我在答案中所写,我已经尝试过'application/vnd.apple.mpegurl'但没有成功。无论如何感谢您的尝试。
【解决方案2】:

Android 代码(ICS、JB)查看 URL 以确定播放器选择!如果 URL 包含关键字 m3u8,那么只有这样,它才会播放 HLS。 这显然是 Android 中的一个错误。

【讨论】:

【解决方案3】:

遇到同样的问题,但“audio/x-mpegURL”似乎与 Apples 网站上的示例 HLS 流使用 http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8 一样工作 - 在 Galaxy Nexus BTW 上进行测试。

虽然有点混乱,但我为什么要四处张望。

【讨论】:

  • 音频?我想播放视频。关键是那里有很多视频播放器——由制造商和商店应用程序实现。如果他们不处理 HLS 但处理 'audio/x-mpegURL' - 这将工作。
  • 不要不同意“音频”没有意义。我只是提到它触发了我的 Galaxy Nexus 上的原生播放器。
  • 什么原生播放器?谷歌音乐?
  • 不是 Google 音乐。它可能是 Android 中为数不多的不是应用程序的组件之一。如果它是图库应用程序的一部分。顺便说一句,我没有在 Android 4.1 或 4.2 上对此进行测试,因此不知道这种行为是否发生了变化(因为它似乎是一个错误)。
  • 我就知道你会这么说 :) 实在是太懒了。
【解决方案4】:

问题

我用的时候

<video id="player"
       src="http://hlsserver.example/auth/and/get/hls?authkey=42" 
       controls>
</video>

它在 Chrome 40 上以 videoElement.error == error.MEDIA_ERR_SRC_NOT_SUPPORTED [1] 失败,尽管 Chrome 请求了三次 src URL,如 tcpdump 中所示。这是来自服务器的响应:

HTTP/1.1 200 OK
Content-Type: application/vnd.apple.mpegurl
[...]

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Swedish",AUTOSELECT=YES,DEFAULT=YES,URI="blah",LANGUAGE="swe"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000,SUBTITLES="subs"
/stream-proxy/blah1
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000,SUBTITLES="subs"
/stream-proxy/blah2
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000,SUBTITLES="subs"
/stream-proxy/blah3

脚注

  1. MEDIA_ERR_SRC_NOT_SUPPORTED 的值为 4

解决方案

似乎thoma.ing's answer 至少适用于 Android 4.4.4 上的 Chrome 40:

Android 代码(ICS、JB)查看 URL 以确定播放器选择!如果 URL 包含关键字 m3u8,那么只有这样,它才会播放 HLS。这显然是 Android 中的一个错误。

当我将视频src URL 更改为包含m3u8 关键字时,它开始在Chrome 上运行良好。

<video id="player"
       src="http://hlsserver.example/auth/and/get/hls?authkey=42&m3u8=yes"
       controls>
</video>

【讨论】:

  • 嗨。问题是关于在 Android 的意图中放入什么 mime 类型,以便重定向到适当的活动/应用程序。问题中没有 html - 只是 HLS 文件的直接链接。
  • 我的网址是blablamdev.testcompany.com/msng/cdcc/AppleHLS1/…meida id/*~hmac=61a45cdb6e6f9fde4835522ad40fe9df0a7a2f,我应该如何在java/android中更改。在 exo 播放器中播放此视频时,我收到错误消息“原因:com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException:响应代码:403”。
猜你喜欢
  • 2023-04-09
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 2012-12-01
  • 2013-12-26
相关资源
最近更新 更多