从hls.js的buffer中保存音频数据时, 出现失真的问题

新手上路,请多包涵

我尝试通过修改hls.js的源代码, 从hls的buffer中提取原始的音频和视频数据. 我将hls原始的appendExecutor函数:

private appendExecutor(data: Uint8Array, type: SourceBufferName) {
  const { operationQueue, sourceBuffer } = this;
  const sb = sourceBuffer[type];
  if (!sb) {
    logger.warn(
      `[buffer-controller]: Attempting to append to the ${type} SourceBuffer, but it does not exist`
    );
    operationQueue.shiftAndExecuteNext(type);
    return;
  }

  sb.ended = false;
  console.assert(!sb.updating, `${type} sourceBuffer must not be updating`);
  console.log(data);
  sb.appendBuffer(data);
}

修改成:

private appendExecutor(data: Uint8Array, type: SourceBufferName) {
  const { operationQueue, sourceBuffer } = this;
  const sb = sourceBuffer[type];
  if (!sb) {
    logger.warn(
      `[buffer-controller]: Attempting to append to the ${type} SourceBuffer, but it does not exist`
    );
    operationQueue.shiftAndExecuteNext(type);
    return;
  }

  sb.ended = false;
  console.assert(!sb.updating, `${type} sourceBuffer must not be updating`);
  console.log(data);

  const blob = new Blob([data]);
  var a = document.createElement("a");
  a.href = URL.createObjectURL(blob);
  a.download = "1";
  a.click();
  URL.revokeObjectURL(a.href);
  
  sb.appendBuffer(data);
}

来进行数据流的提取, 但是保存后的文件(尤其是音频文件)出现了一定程度的失真, 其中音频文件的问题较为明显, 存在较大噪音以及音调变得很低的问题. 使用ffmpeg查看音频信息时会出现[mov,mp4,m4a,3gp,3g2,mj2 @ 0x557ff36a1fc0] Duplicated SDTP atom的问题. 请问这种问题有办法解决么?

阅读 2.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题