C ++ - CGI - 音频无法正常工作

时间:2015-01-28 09:11:43

标签: c++ html5 apache audio


我有一个HTML5音频元素的网站,其音频数据应通过cgi脚本提供 标记相当简单:

<audio controls>
  <source type="audio/mpeg" src="audio.cgi?test.mp3">
  <em>Me, your browser does not support HTML5 audio</em>
</audio>

cgi是用C ++编写的,也非常简单,我知道需要优化,例如:在缓冲区中读取整个文件真的很糟糕,但这不是重点 这个基本版本有点工作,意味着播放音频,但播放器不显示全长,只能在已经播放的部分中搜索音轨。

如果音频文件放在可通过网络服务器访问的位置,一切正常 这两种方法之间的区别似乎是,如果选择后一种方法,客户端会发出partial-content请求,如果我尝试通过cgi立即提供音频数据,则会发出普通200。 / p>

我想在cgi中实现partial-content服务,但我没有读出环境变量Request-Range,这是提供所请求数据部分所必需的。

这引出了我的问题:

  1. 如果我通过cgi脚本提供音频数据,为什么HTML5播放器不显示音轨的全长?
  2. 实施partial-content处理会解决此问题吗?
  3. 如果partial-content处理是正确的方法,我将如何在apache中访问所需的环境变量,因为我还没有找到任何关于它们的信息?我是否需要发送完整的HTTP header来表明partial-content即将到来,以便客户知道他需要发送必填字段?
  4. 这是.cgi

    的来源
    void serveAudio()
    {
        //tried these, were not the right ones
        //getenv("HTTP_RANGE");
        //getenv("HTTP_CONTENT_RANGE");
    
        ifstream in(audioFile, ios::binary | ios::ate);
        size_t size = in.tellg();
        char *buffer = new char[size];
    
        in.seekg(0, ios::beg);
        in.read(buffer, size);
    
        cout<<"Content-Type: audio/mpeg\n\n";
        cout.write(buffer, size);
    }
    

    任何建议和有用的评论都表示赞赏! 提前谢谢!

    P.S:

    忘记提及此行为适用于FF 31和IE 11.

0 个答案:

没有答案