Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多流网络音频_Javascript_Html5 Audio_Audio Streaming_Web Audio Api - Fatal编程技术网

Javascript 多流网络音频

Javascript 多流网络音频,javascript,html5-audio,audio-streaming,web-audio-api,Javascript,Html5 Audio,Audio Streaming,Web Audio Api,我试图通过基于RESTful的web服务来传输音频。我的音频文件包含两个不同的AAC 228 Kbps立体声曲目。一个是英语,另一个是西班牙语 我的GET请求返回音频文件没有问题。但是,它默认为文件上的第一个源(在本例中为西班牙语) 最终,我希望最终用户能够使用浏览器并根据需要在音频源之间切换。我已经知道,大多数浏览器目前不支持通过HTML5提供的audioTracks API,我不希望将最终用户限制在IE或Edge上 这使我开始使用Web音频API来尝试手动操作流 测试我当前的HTML只需一个

我试图通过基于RESTful的web服务来传输音频。我的音频文件包含两个不同的AAC 228 Kbps立体声曲目。一个是英语,另一个是西班牙语

我的GET请求返回音频文件没有问题。但是,它默认为文件上的第一个源(在本例中为西班牙语)

最终,我希望最终用户能够使用浏览器并根据需要在音频源之间切换。我已经知道,大多数浏览器目前不支持通过HTML5提供的audioTracks API,我不希望将最终用户限制在IE或Edge上

这使我开始使用Web音频API来尝试手动操作流

测试我当前的HTML只需一个播放按钮

<md-button class="md-raised" ng-click="audioActions()">Audio options</md-button>
这适用于流式传输初始音频,工作原理与使用
标记相同

有没有办法在缓冲区内的音频流之间切换

下面是从ffmpeg-i在我的文件中转储的内容:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0000000000ea6920] stream 0, timescale not set
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\ServerFiles\tmp\audioExample.m4a':
  Metadata:
    major_brand     : M4A
    minor_version   : 0
    compatible_brands: M4A mp42isom
    creation_time   : 1982-08-11T07:52:37.000000Z
    title           : Test
    artist          : Audio Example
    album_artist    : Audio Example
    album           : Example
    genre           : Test
    track           : 1/20
    disc            : 1/1
    compilation     : 0
    gapless_playback: 0
    date            : 2017-08-16T08:00:00Z
    account_id      : 
    rating          : 0
    account_type    : 0
    season_number   : 0
    episode_sort    : 0
    media_type      : 1
    purchase_date   : 2017-08-16 15:59:27
    sort_album      : Audio Example
    composer        : Example
  Duration: 00:02:59.00, start: 0.000000, bitrate: 160 kb/s
    Stream #0:0: Audio: aac (HE-AAC), 48000 Hz, stereo, fltp (default)
    Stream #0:1: Audio: aac (HE-AAC), 48000 Hz, stereo, fltp

实现您目前要求的最简单的方法是使用MediaSource扩展

基本上,您需要缓冲数据,然后让浏览器解码数据块。当您想要切换到其他内容时,只需开始从另一个流中输入块进行解码


这里有一个更好的例子:

我现在的问题是我不知道如何获取这些单独的块。我的服务只是返回许多音频文件中的一个。嵌入在这些音频文件中的是两个流。通过以下链接,我可以理解如何缓冲加载整个文件。但在本文档中,没有任何地方指定或给出在一个文件中包含两个音频流的示例。除非我遗漏了什么。@cain4355这些文件的容器格式是什么?你能提供
ffmpeg-i yourfile
的输出吗?我将我的ffmpeg结果添加到了我的原始文件中post@cain4355除了在JavaScript中分解MP4之外,我认为您需要做的是将它们分割成单独的文件。我怀疑很快(一年内),这将不再是必要的(对于现代浏览器),因为我们将获得对多个音频曲目的适当支持。您可以使用类似于
ffmpeg-i audioExample.m4a-map 0:0-c:a copy audioExample-track-0.m4a
或类似的方法来拆分它们。我如何在JavaScript中对MP4进行解组?
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000000000ea6920] stream 0, timescale not set
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\ServerFiles\tmp\audioExample.m4a':
  Metadata:
    major_brand     : M4A
    minor_version   : 0
    compatible_brands: M4A mp42isom
    creation_time   : 1982-08-11T07:52:37.000000Z
    title           : Test
    artist          : Audio Example
    album_artist    : Audio Example
    album           : Example
    genre           : Test
    track           : 1/20
    disc            : 1/1
    compilation     : 0
    gapless_playback: 0
    date            : 2017-08-16T08:00:00Z
    account_id      : 
    rating          : 0
    account_type    : 0
    season_number   : 0
    episode_sort    : 0
    media_type      : 1
    purchase_date   : 2017-08-16 15:59:27
    sort_album      : Audio Example
    composer        : Example
  Duration: 00:02:59.00, start: 0.000000, bitrate: 160 kb/s
    Stream #0:0: Audio: aac (HE-AAC), 48000 Hz, stereo, fltp (default)
    Stream #0:1: Audio: aac (HE-AAC), 48000 Hz, stereo, fltp