iOS移动版上不支持的HLS视频

时间:2018-02-18 17:34:42

标签: android ios hls m3u8 mse

快速背景故事,我正在使用Raspberry Pi构建一个婴儿监视器,并使用Node.JS编写Web前端。我有一些旧手机,我打算留在家里,所以婴儿监视器可以分散。到目前为止,整个系统的大部分都在工作,除了iPhone上的HLS视频组件。

HLS视频部分可在我的桌面上使用Linux / Chomimum和我的Android / Chrome手机。我也可以通过Chrome在HOOK上使用HLS视频在MacBook(10.13.3)上运行。但是,我真正的问题是我无法让HLS视频在任何 iOS移动设备 上工作,特别是iOS版本10.3.3和11.2.5。

我在客户端使用HLS.js来设置./picam --hlsdir /run/shm/picam/hls --vflip --autoex --alsadev "hw:1,0" --vfr --avcprofile baseline --avclevel 3.1 HTML元素。我知道移动设备上的iOS不支持媒体源扩展(MSE),这将解释为什么HLS.js不能在我的iPhone上运行。然而," native"移动设备上的HLS支持似乎仍然不支持媒体文件的格式。

我正在使用此picam代码(来自iizukanao)从Pi的相机创建m3u8播放列表和相应的.ts文件。我怀疑m3u8文件没有移动iOS客户端想要的格式。我手动搞砸了m3u8文件,但我没有看到任何积极的影响。我用:

运行picam模块
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:1
#EXT-X-MEDIA-SEQUENCE:341
#EXT-X-ALLOW-CACHE:NO
#EXTINF:1.07678,
340.ts
#EXTINF:0.31413,
341.ts
#EXT-X-ENDLIST

示例m3u8文件:

ffprobe https://RPI/hls/index.m3u8
[https @ 0x9667c0] No trailing CRLF found in HTTP header.
[tls @ 0x966980] The TLS connection was non-properly terminated.
[https @ 0x11a67e0] No trailing CRLF found in HTTP header.
Input #0, hls,applehttp, from 'https://RPI/hls/index.m3u8':
  Duration: N/A, start: 301.014111, bitrate: N/A
  Program 0 
    Metadata:
      variant_bitrate : 0
    Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1280x720, 15.83 tbr, 90k tbn, 180k tbc
    Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz,     mono, fltp, 43 kb/s

我认为我有基于此Apple FAQ的正确编解码器和ffprobe的输出:

server {
    listen 8443 ssl;

    ssl_certificate     RPI.crt;
    ssl_certificate_key RPI.key;
    ssl_password_file   RPI.pass;

    server_name RPI;

    location /hls {
        add_header 'Accept-Ranges' 'bytes';
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Expose-Headers' 'Content-Length';
        add_header 'Cache-Control' 'no-cache';
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Length' 0;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            return 204;
        }
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
        root /run/shm/picam;
    }
}

我使用nginx和此站点配置提供实际的HLS文件:

print(item[OBJECTNAME])

有没有人对我的iPhone为什么认为视频格式不受支持有任何想法?

如果有帮助,我的全部代码都在Github上:(暂不判断我的代码,它还在进行中)

(我用" RPI&#34替换了各种IP地址,主机名和文件名;)

0 个答案:

没有答案