我正在尝试通过基于RESTful的Web服务流式传输音频。我的音频文件包含两个不同的AAC 228 Kbps立体声轨道,一个是英语,另一个是西班牙语。
我的GET请求没有问题地返回了音频文件。然而,默认选择文件中的第一条轨道(在这种情况下是西班牙语)。
最终,我希望最终用户能够使用浏览器并根据需要切换音频源。我已经知道大多数浏览器当前不支持HTML5提供的audioTracks API,而且我不想限制最终用户只使用IE或Edge。
这就引出了使用Web Audio API手动操纵流的问题。
为了测试,我当前的HTML只有一个播放按钮。
我的GET请求没有问题地返回了音频文件。然而,默认选择文件中的第一条轨道(在这种情况下是西班牙语)。
最终,我希望最终用户能够使用浏览器并根据需要切换音频源。我已经知道大多数浏览器当前不支持HTML5提供的audioTracks API,而且我不想限制最终用户只使用IE或Edge。
这就引出了使用Web Audio API手动操纵流的问题。
为了测试,我当前的HTML只有一个播放按钮。
<md-button class="md-raised" ng-click="audioActions()">Audio options</md-button>
我的当前.js文件如下所示:
var context;
window.addEventListener('load', init, false);
function init() {
try {
// Fix up for prefixing
window.AudioContext = window.AudioContext||window.webkitAudioContext;
context = new AudioContext();
}
catch(e) {
alert('Web Audio API is not supported in this browser');
}
}
var onError = function() {
$log.info("ERROR");
}
$scope.audioActions = function() {
var request = new XMLHttpRequest();
request.open('GET', 'http://localhost...', true);
request.responseType = 'arraybuffer';
// Decode asynchronously
request.onload = function() {
context.decodeAudioData(request.response, function(buffer) {
$log.info(buffer)
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
source.start(0);
}, onError);
}
request.send();
};
这适用于流传输初始音频,并且与使用 <audio>
标签相同。
是否有一种方法可以在缓冲区内切换音频流?
以下是我的文件从 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
ffmpeg -i yourfile
的输出吗? - Bradffmpeg -i audioExample.m4a -map 0:0 -c:a copy audioExample-track-0.m4a
的工具来拆分它们。 - Brad