【问题标题】:iPhone can not play video from my web page (server)iPhone 无法从我的网页(服务器)播放视频
【发布时间】:2015-01-28 21:50:58
【问题描述】:

我正在使用来自 Android 设备的 NanoHTTPD 流式传输视频。除iPhone外,每台设备都可以播放网页中的视频文件或使用外部媒体播放器。即使Mac 桌面也可以播放文件。我手动将视频文件推送到iPhone,它可以播放。所以视频格式没有问题。当我点击链接 iPhone 打开视频播放器(网页内)时,什么也没有发生。

响应

【问题讨论】:

    标签: android ios iphone nanohttpd


    【解决方案1】:

    我已经解决了我的问题。添加范围功能后(可以使用播放器滑块搜索任何地方)iPhone可以播放视频。

    private Response servePartialFile(String uri, Map<String, String> header,
                                          File file, String mime) {
            Response res;
            try {
                // Calculate etag
                String etag = Integer.toHexString((file.getAbsolutePath()
                        + file.lastModified() + "" + file.length()).hashCode());
    
                // Support (simple) skipping:
                long startFrom = 0;
                long endAt = -1;
                String range = header.get("range");
                if (range != null) {
                    if (range.startsWith("bytes=")) {
                        range = range.substring("bytes=".length());
                        int minus = range.indexOf('-');
                        try {
                            if (minus > 0) {
                                startFrom = Long.parseLong(range
                                        .substring(0, minus));
                                endAt = Long.parseLong(range.substring(minus + 1));
                            }
                        } catch (NumberFormatException ignored) {
                        }
                    }
                }
    
                // Change return code and add Content-Range header when skipping is
                // requested
                long fileLen = file.length();
                if (range != null && startFrom >= 0) {
                    if (startFrom >= fileLen) {
                        res = createResponse(Response.Status.RANGE_NOT_SATISFIABLE,
                                NanoHTTPD.MIME_PLAINTEXT, "");
                        res.addHeader("Content-Range", "bytes 0-0/" + fileLen);
                        res.addHeader("ETag", etag);
                    } else {
                        if (endAt < 0) {
                            endAt = fileLen - 1;
                        }
                        long newLen = endAt - startFrom + 1;
                        if (newLen < 0) {
                            newLen = 0;
                        }
    
                        final long dataLen = newLen;
                        FileInputStream fis = new FileInputStream(file) {
                            @Override
                            public int available() throws IOException {
                                return (int) dataLen;
                            }
                        };
                        fis.skip(startFrom);
    
                        res = createResponse(Response.Status.PARTIAL_CONTENT, mime,
                                fis);
                        res.addHeader("Content-Length", "" + dataLen);
                        res.addHeader("Content-Range", "bytes " + startFrom + "-"
                                + endAt + "/" + fileLen);
                        res.addHeader("ETag", etag);
                    }
                } else {
                    if (etag.equals(header.get("if-none-match")))
                        res = createResponse(Response.Status.NOT_MODIFIED, mime, "");
                    else {
                        res = createResponse(Response.Status.OK, mime,
                                new FileInputStream(file));
                        res.addHeader("Content-Length", "" + fileLen);
                        res.addHeader("ETag", etag);
                    }
                }
            } catch (IOException ioe) {
                res = createResponse(Response.Status.FORBIDDEN,
                        NanoHTTPD.MIME_PLAINTEXT, "FORBIDDEN: Reading file failed.");
            }
    
            return res;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多