我有一个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
,这是提供所请求数据部分所必需的。
这引出了我的问题:
partial-content
处理会解决此问题吗?partial-content
处理是正确的方法,我将如何在apache中访问所需的环境变量,因为我还没有找到任何关于它们的信息?我是否需要发送完整的HTTP header
来表明partial-content
即将到来,以便客户知道他需要发送必填字段?这是.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.