如何通过html5播放.spx文件?

时间:2012-12-19 08:34:02

标签: html5-audio speex

来自html5规范,似乎支持spx: http://dev.w3.org/html5/spec-preview/the-source-element.html

使用:      

但是从我的尝试来看,它无法在Firefox 17和Chrome中播放,你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

我发现GitHub上的speex.js(https://github.com/jpemartins/speex.js)可以解决你的问题。使用speex.js你可以解复用&将speex文件(* .spx或* .ogg)解码为wav on fly,Chrome / Firefox和许多其他现代浏览器都支持HTML5。

<script src="bitstring.js"></script>
<script src="pcmdata.min.js"></script>
<script src="speex.js"></script>
  • 下面的函数将把spx转换成wav编解码器:
/**
  * @param bufSpx ArrayBuffer (Uint8Array) holding content of speex file (*.spx or *.ogg)
  */
function decodeFile(bufSpx) {
  var stream, samples, st;
  var ogg, header, err;

  ogg = new Ogg(bufSpx, {file: true});
  ogg.demux();
  stream = ogg.bitstream();

  header = Speex.parseHeader(ogg.frames[0]);
  console.log(header);

  comment = new SpeexComment(ogg.frames[1]);
  console.log(comment.data);

  st = new Speex({
    quality: 8,
    mode: header.mode,
    rate: header.rate
  });

  samples = st.decode(stream, ogg.segments);

  var waveData = PCMData.encode({
      sampleRate: header.rate,
      channelCount: header.nb_channels,
      bytesPerSample: 2,
      data: samples
    });

  // array buffer holding audio data in wav codec
  var bufWav = Speex.util.str2ab(waveData);
  // convert to a blob object
  var blob = new Blob([bufWav], {type: "audio/wav"});
  // return a "blob://" url which can be used as a href anywhere
  return URL.createObjectURL(blob);
}

答案 1 :(得分:1)

规范说:

  

type属性给出媒体资源的类型,以帮助   用户代理确定它之前是否可以播放此媒体资源   拿它。

规范本身并未指定任何支持的音频或视频格式,并且支持取决于各个浏览器。

...据我所知,没有浏览器支持.spx。