流式传输在线音频和视频已被注入了很多很棒的功能。 在线体验不再仅限于两声道立体声。 杜比数字增强技术(Dolby Digital Plus)是杜比(Dolby)的高级编解码器,专门设计用于通过为流环绕声媒体提供高保真,低延迟的解决方案来增强在线体验,并且该编解码器已作为Microsoft Windows 10的标准内置。
不需要任何特殊技巧或专用插件即可通过Web浏览器体验环绕声,因为Dolby Digital Plus编解码器像其他任何编解码器一样可用于HTML5音频和视频元素。 这意味着,假设您使用的网络浏览器和操作系统支持Dolby Digital Plus编解码器,您现在就可以在线体验使用杜比环绕声媒体的乐趣。
HTML5功能检测
如果您是Web开发人员,并且想为用户提供环绕声媒体,则需要确保Dolby Digital Plus编解码器可用。 如果编解码器不可用,则需要提供备用媒体流。
毋庸置疑,运行Windows 10和Microsoft Edge浏览器的用户将能够欣赏杜比环绕声媒体流,但是需要进行功能检测才能向尽可能广泛的受众提供内容。
如果直接将媒体元素添加到HTML文档中,现代Web浏览器实际上可以代表您处理功能检测。 以下HTML片段将尝试播放Dolby Digital Plus编码的视频流,如果Dolby Digital Plus编解码器不可用,它将退回到标准的立体声编码的视频流。
<!-- A video player with standard playback controls -->
<video controls>
<!-- Dolby Digital Plus -->
<source src='movie_1.m4v'
type='video/mp4;codecs="avc1.42E01E,ec-3"'>
<!-- One or more alternative formats (fallbacks) -->
<source src='movie_2.m4v'
type='video/mp4;codecs="avc1.42E01E,mp4a.40.2"'>
<div class='no-video-support'>
<!-- The HTML5 <video> element is not supported -->
</div>
</video>
如果要使用JavaScript处理功能检测,则可以使用媒体元素公开的canPlayType
函数。
var getDDSupport = function (callback) {
if (video.canPlayType('audio/mp4;codecs="ec-3"') === '' || video.canPlayType('audio/mp4;codecs="ac-3"') === '') {
supportDDPlus = false;
callback();
} else {
var audio = new Audio();
audio.muted = true;
audio.addEventListener('error', function () {
supportDDPlus = false;
callback();
}, false);
audio.addEventListener('seeked', function () {
supportDDPlus = true;
callback();
});
audio.src = '/assets/silence.mp4';
audio.play();
try {
audio.currentTime = 2;
} catch (e) {
//eslint-disable-line no-empty
}
}
};
就这么简单。 您也可以检出所附的silence.mp4文件,以在自己的测试中使用。 请注意,之所以使用Silence.mp4文件是因为某些浏览器返回的是假阳性。 如果您以前使用过HTML5媒体元素,则可能已经对Web浏览器中的这种功能检测感到满意。
注意:杜比数字+(Dolby Digital Plus)技术不仅限于视频流。 如果愿意,您可以向观众提供独立的环绕声音频流。
环绕声
那么,环绕声到底是什么? 简而言之,环绕声音频流通常包含六个或八个独立的声道。 它提供了一种使听众沉浸在动态3D音景中的方法,并且是电影院和家庭娱乐系统的事实上的标准。 相反,立体声音频流仅包含两个单独的声音通道,而单声道音频流则包含一个单独的声音通道。
5.1环绕声
5.1环绕声音频流包含六个单独的声道。
前三个声音通道(LCR)位于聆听者的前方,左侧,中部和右侧。 它们提供了大多数声音,并且在大多数情况下与标准立体声左和右声道兼容。 中央声音通道通常用于对话,但是当电影中发生微妙的平移时,它也有助于使声音居中。
接下来的两个声音通道(LS和RS)位于听众的后面。 它们在环绕声音频流中提供“环绕声”,通常用于增强环境音景。 如果您想象一个电影场景,其中有人在森林中穿行,则可以使用LS和RS声音通道为鸟叫,沙沙作响,阵阵风等提供其他声音。
最后,在5.1设置中的第六个声音通道(LFE)用于低频效果。 LFE通道的主要目的是向一个或多个低音炮提供低频声音,通常是低于120Hz的任何频率。 该频道可提供巨大的胸部刺激体验,以伴随屏幕上的大型爆炸等。
7.1环绕声
7.1环绕声音频流扩展了5.1,增加了两个额外的声音通道(CL和CR),它们位于听众的两侧,总共提供了八个单独的声音通道。 这两个额外的通道通常与前声道(LCR)结合使用,以提供更大的声音角度。
演讲者位置
国际电信联盟已经标准化了环绕声扬声器相对于听众的理想位置。 下图显示了理想的标准化扬声器位置。
左 (L)扬声器和右 (R)扬声器之间的角度为60度,中置 (C)扬声器直接位于听众的前方。 左环绕 (LS)和右环绕 (RS)扬声器的位置与中央(C)扬声器大约110度。 由于低频限制, 低频效果扬声器(LFE)(即低音炮)的位置不太重要,但通常放置在靠近收听者的位置,有时直接位于收听者的下方。
音频制作
环绕声音频流的产生超出了本文的范围,但是许多现代的声音编辑软件包(包括Audacity和Adobe Audition)允许您创建环绕声音频文件并将其导出为WAV或AIFF文件。 然后可以通过编码器或Microsoft Azure Media Encoder之类的服务(请参阅下文)推送导出的文件,以生成可通过Internet流式传输的高保真Dolby Digital Plus音频和/或视频文件。
使用Microsoft Azure媒体编码器进行编码
Microsoft Azure媒体服务提供了一个优雅的,基于任务的解决方案,用于在线编码Dolby Digital Plus音频和视频,并且Microsoft出色地为所有人提供了免费的Azure试用版。 除了免费试用外,编码(撰写时)的起价为每GB 1.99美元,这是物有所值的; 您将不再需要使用昂贵的桌面软件来将您绝妙的Dolby Digital Plus环绕声传播给大众。
下面的代码描述了使用Azure服务和Dolby Digital Plus编码器以编程方式对视频文件进行编码所需的过程,但是假定您已经具有使用Azure服务和NET的Media Services SDK的经验。
//
// Create the service context.
//
var context = new CloudMediaContext(
new MediaServiceCredentials("accountName", "accountKey")
);
//
// Create the latest version of the processor.
//
var proc = context.MediaProcessors.
Where(p => p.Name == "Azure Media Encoder").
ToList().
OrderBy(p => new Version(p.Version)).
LastOrDefault();
//
// Load the configuration file.
//
var conf = File.ReadAllText("ddp720.xml");
//
// Create the job.
//
var job = context.Jobs.Create("identifier");
var task = job.Tasks.addNew("identifier", proc, conf, TaskOptions.None);
task.InputAssets.Add(asset); // Assumes 'asset' has been loaded elsewhere.
task.OutputAssets.AddNew("identifier", AssetCreationOptions.StorageEncrypted);
//
// Start the job.
//
job.StateChanged += new EventHandler<JobStateChangedEventArgs>(StateChanged);
job.Submit();
job.GetExecutionProgressTask(CancellationToken.None).Wait();
var encoded = job.OutputMediaAssets[0]; // The encoded asset.
//
// State change handler.
//
void StateChanged(object sender, JobStateChangedEventArgs e) {
switch (e.CurrentState) {
case JobState.Finished: {
Console.WriteLine("Done!");
break;
}
case JobState.Canceling:
case JobState.Processing:
case JobState.Queued:
case JobState.Scheduled: {
Console.WriteLine("Processing...");
break;
}
case JobState.Canceled:
case JobState.Error: {
// Handle the error or cancellation.
break;
}
default: {
break;
}
}
}
加载到程序中的配置文件ddp720.xml
如下。
<?xml version="1.0" encoding="utf-8"?>
<Preset Version="5.0">
<Job />
<MediaFile
DeinterlaceMode="AutoPixelAdaptive"
ResizeQuality="Super"
AudioGainLevel="1"
VideoResizeMode="Stretch">
<OutputFormat>
<MP4OutputFormat
StreamCompatibility="Standard">
<AudioProfile
Condition="SourceContainsAudio">
<DolbyDigitalPlusAudioProfile
Codec="DolbyDigitalPlus"
EncoderMode="DolbyDigitalPlus"
AudioCodingMode="Mode32"
LFEOn="True"
SamplesPerSecond="44000"
BandwidthLimitingLowpassFilter="True"
DialogNormalization="-31">
<Bitrate>
<ConstantBitrate
Bitrate="256"
IsTwoPass="False"
BufferWindow="00:00:00" />
</Bitrate>
</DolbyDigitalPlusAudioProfile>
</AudioProfile>
<VideoProfile
Condition="SourceContainsVideo">
<HighH264VideoProfile
BFrameCount="3"
EntropyMode="Cabac"
RDOptimizationMode="Speed"
HadamardTransform="False"
SubBlockMotionSearchMode="Speed"
MultiReferenceMotionSearchMode="Balanced"
ReferenceBFrames="False"
AdaptiveBFrames="True"
SceneChangeDetector="True"
FastIntraDecisions="False"
FastInterDecisions="False"
SubPixelMode="Quarter"
SliceCount="0"
KeyFrameDistance="00:00:05"
InLoopFilter="True"
MEPartitionLevel="EightByEight"
ReferenceFrames="4"
SearchRange="64"
AutoFit="True"
Force16Pixels="False"
FrameRate="0"
SeparateFilesPerStream="True"
SmoothStreaming="False"
NumberOfEncoderThreads="0">
<Streams
AutoSize="False"
FreezeSort="False">
<StreamInfo
Size="1280,720">
<Bitrate>
<ConstantBitrate
Bitrate="5200"
IsTwoPass="False"
BufferWindow="00:00:05" />
</Bitrate>
</StreamInfo>
</Streams>
</HighH264VideoProfile>
</VideoProfile>
</MP4OutputFormat>
</OutputFormat>
</MediaFile>
</Preset>
该配置文件可产生具有Dolby Digital Plus 5.1环绕声的H.264 720p视频。 EncoderMode
属性"DolbyDigitalPlus"
告诉编码器使用Dolby Digital Plus,而AudioCodingMode
"Mode32"
告诉编码器使用5.1环绕声。 同样,必须将LFEOn
属性设置为"True"
以启用低频效果(LFE)声音通道。
本文结尾的“ 资源”部分提供了其他信息。
使用Adobe Premiere Pro编码
最新版本的Adobe Premiere Pro提供对Dolby Digital Plus的支持,使您可以将5.1和7.1环绕声直接混入视频中。
本文结尾的“ 资源”部分提供了其他信息。
总结思想
作为在线音频和视频的狂热消费者,我对杜比数字+感到兴奋。 得益于Dolby出色的工作和Microsoft的支持,我们现在可以在互联网上流式传输真正的Dolby环绕声。
在线游戏,哦,是的,它们也可以从杜比环绕声中受益,如娱乐性极高的Lux Ahoy游戏所展示的那样,但是请记住,您现在必须运行Windows 10和Microsoft Edge!
最后
围绕其他专有Web技术可能存在一些争议,但是老实说,如果专有技术允许Dolby和Microsoft之类的公司向我们提供Dolby Digital Plus之类的编解码器,您将不会听到我的任何投诉。
资源资源
翻译自: https://code.tutsplus.com/articles/the-dolby-audio-and-microsoft-edge-experience--cms-24269