Android HLS视频哑剧类型

lhcgjxsq  于 2023-03-21  发布在  Android
关注(0)|答案(5)|浏览(122)

我想激发一个Intent来播放HLS(HTTP直播流)视频。
我应该在类型字段中输入什么才能只启动支持HLS的视频播放器?
我尝试了失败以下操作:

video/m3u

video/m3u8

video/hls

application/x-mpegURL

vnd.apple.mpegURL

video/MP2T

application/vnd.apple.mpegurl

有什么想法...

1l5u6lss

1l5u6lss1#

应该将RFC中指定的内容类型类型:应用程序/vnd.apple.mpegurl.请参见https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-08的第3.1节
Android对HLS的支持非常差。你将需要一些第三方软件在许多设备上,特别是版本低于3。谷歌似乎并不关心,或至少没有回归测试。

hrysbysz

hrysbysz2#

Android代码(ICS,JB)查看URL来确定玩家选择!如果URL包含关键字m3u8,那么并且只有在那时,它才会播放HLS。这显然是Android中的一个bug。

edqdpe6u

edqdpe6u3#

有同样的问题,但“音频/x-mpegURL”似乎是什么样的苹果网站上的样本HLS流使用http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8-测试Galaxy Nexus BTW。
有点困惑,所以我才四处看看。

7xllpg7q

7xllpg7q4#

问题是

当我用

<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中的一个bug。
当我更改视频src的网址,以包括m3u8关键字,它开始在Chrome上工作得非常好。

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

8iwquhpp5#

HLS格式视频的Mimetype是“应用程序/x-mpegURL”

<video>
     <source src="example.m3u8" type="application/x-mpegURL">
   </video>

相关问题