如何将数据导出为m3u8文件?

时间:2016-06-15 13:27:42

标签: javascript html

我想下载并播放服务器机器上的m3u8文件。我使用以下代码来读取和发送m3u8文件到Web服务器。 浏览器显示文件的内容而不是下载它。 所以请让我知道,如何下载它。

if ((exportHandle = fopen(v3FileName, "a+")) != NULL) {
    long end = 0, start = 0, pos = 0;
    char* m3u8FileDataBuff = NULL;
    fseek(exportHandle, 0, SEEK_END);
    end = ftell(exportHandle);
    fseek(exportHandle, 0, SEEK_SET);
    start = ftell(exportHandle);
    pos = end - start;
    m3u8FileDataBuff = (char *) malloc(pos);
    end = 0;
    start = 0;
    fread(m3u8FileDataBuff, 1, pos, exportHandle);
    pClienCommunication->writeBuffer(m3u8FileDataBuff, pos);
    free(m3u8FileDataBuff);
    fclose(exportHandle);
 }

1 个答案:

答案 0 :(得分:0)

客户端的Web浏览器正在显示内容,因为响应的MIME类型为nil,或类似" text / plain"。正确设置http响应标头以指示m3类型的m3u8文件(application/x-mpegURLvnd.apple.mpegURL)。

您提供的一段代码似乎没有在响应标题周围设置任何内容,只是内容。

检查pClienCommunication->的可用API,或者发布源自哪里,您可以选择调整响应标头。

或者也可以通过在为响应提供服务的Web服务器中设置某些规则,为某些URL设置MIME类型或根据响应内容(但应用此类规则)来解决此问题在Web服务器级别上通常比在C ++部分中创建时调整响应更昂贵。

为什么这个标记的C ++,当代码本身就像C一样有它的所有问题。在现代C ++中,你永远不会做像" fclose(..)"这样的事情,因为这是在文件包装器类的析构函数中完成的,所以你不会冒险fclose将被跳过以防万一在fread等中引发的一些例外

所以在现代C ++中,这些东西应该看起来像这样:

{
    SomeFileClass exportFile(v3FileName, "a+");
    if (exportFile.isOK()) {
        SomeFileContentBuffer data = exportFile.read();
        pClienCommunication->writeBuffer(data.asCharPtr(), data.size());
    }
}

所以你不能忘记释放任何文件句柄或缓冲区内存(因为特定帮助程序类的析构函数会处理它)。