支持Transport Stream传输流,该类文件扩展名包括.ts、.tp、.m2ts、.tod、.m2t、mts。TS中支持下述格式的视频、音频、字幕。
视频
MPEG-1 Video:stream_type为0x01
MPEG-2 Video:stream_type为0x02
AVC(H264):stream_type为0x1b
VC-1:stream_type为0xea
音频
Mpeg-1 Audio:stream_type为0x03
Mpeg-2 Audio:stream_type为0x04
Mpeg-2 AAC:stream_type为0x0f
Mpeg-4 AAC:stream_type为0x11
LPCM:stream_type为0x80
AC3:stream_type为0x81或0x06
DTS:stream_type为0x82
Dolby TrueHD:stream_type为0x83
AC3-Plus:stream_type为0x84
DTS_HD:stream_type为0x85
DTS-MA:stream_type为0x86
AC3-Plus_SEC:steam_type为0xa1
DTS_HD_SEC:stream_type为0xa2
字幕
PGS:stream_type为0x90
IGS:steam_type为0x91,暂不支持
Text Subtitle:stream_type为0x92
PS
支持Program Stream节目流,该类媒体包括VCD、SVCD、DVD、HD-DVD。
常见扩展名包括.dat、.mpg、.mpeg、.vob、.evo、.mod、.m1s、.m2s。PS中支持下述格式的视频、音频、字幕
视频
Mpeg-1 Video:stream_type为0x01
Mpeg-2 Video:stream_type为0x02
Mpeg-4 Video:stream_type为0x010
H264:stream_type为0x1b
AVS Video:stream_type为0x43
音频
Mpeg-1 Audio:stream_type为0x03
Mpeg-2 Audio:stream_type为0x04
Mpeg-2 AAC:stream_type为0x0f
Mpeg-4 AAC:stream_type为0x11
AVS Audio:stream_type为0x42
字幕
支持内嵌字幕
AVI
支持AVI文件,扩展名为.avi。AVI中支持以下格式的视频、音频、字幕。
视频:支持以下FourCC的视频
Mpeg-1 Video:mpg1/MPG1、pim1/PIM1
Mpeg-2 Video:mpg2/MPG2、mpeg/MPEG、pim2/PIM2、vcr2/VCR2、dvr/DVR、mmes/MMES、lmp2/LMP2。
Mpeg-4 Video:mp4s/MP4S、m4s2/M4S2、xvid/XVID、divx/DIVX、dx50/DX50、mp4v/MP4V、fmp4/FMP4
、div1/DIV1、blz0/BLZ0、ump4/UMP4、sedg/SEDG、rmp4/RMP4、3iv2/3IV2、ffds/FFDS、fvfw/FVFW、
dcod/DCOD、
mvxm/MVXM、pm4v/PM4V、smp4/SMP4、dxgm/DXGM、vidm/VIDM、m4t3/M4T3、geox/GEOX、hdx4/HDX4、
dmk2/DMK2、digi/DIGI、inmc/INMC、ephv/EPHV、em4a/EM4A、m4cc/M4CC、sn40/SN40、wv1f/WV1F。
H.263:h263/H263、x263/X263、m263/M263、t263/T263、l263/L263、u263/U263、vx1k/VX1K、ZyGo、viv1/VIV1。
Intel H.263:i263/I263。
H.264:h264/H264、x264/X264、n264/N264、l264/L264、avc1/AVC1、vssh/VSSH。
VC-1:wmv3/WMV3、wmva/WMVA、wvc1/WVC1。
Microsoft Video:wmv2/WMV2、wmv1/WMV1、mp43/MP43、div3/DIV3、mpg3/MPG3、div5/DIV5、div6/DIV6、
div4/DIV4、dvx3/DVX3、ap41/AP41、col1/COL1、col0/COL0、mp42/MP42、dvx2/DVX2、mpg4/MPG4、mp41/MP41、
mss1/MSS1、mss2/MSS2、wmvp/WMVP、wvp2/WVP2。
RGB:BI_RGB(0x00000000)、BI_RLE8(0x01000000)、BI_RLE4(0x02000000)、BI_BITFIELDS(0x03000000)。
YUV:yv12/YV12、iyuv/IYUV uyuy/UYUY、vyuy/VYUY、2vuy/2VUY、yuv9/YUV9、yvu9/YVU9、ifo9/IFO9。
Motion Jpeg:mjpg/MJPG、ljpg/LJPG、dmb1/DMB1、jpgl/JPGL、mjls/MJLS、jpeg/JPEG、ijpg/IJPG、acdv/ACDV、
qivg/QIVG、slmj/SLMJ、cjpg/CJPG、zjpg/ZJPG、AVRn。
Motion GIF:mgif/MGIF、gif/GIF。
Motion PNG:mpng/MPNG、png1/PNG1、png/PNG。
音频:支持以下FormatTag的音频
lpcm:0x0001
ms_adpcm:0x0002
float pcm:0x0003
a-law:0x0006
mu-law:0x007
ima-adpcm:0x0011
create_adpcm:0x0200
mpeg-1 audio layer Ⅱ:0x50
mpeg-1 audio layer Ⅲ:0x55
ac-3:0x2000
dts:0x2001
wma1:0x160
wma2:0x161
wma professional:0x162
wma lossess:0x163
wma speech 9:0x0a
mpeg-2 aac with raw data block:0xff
mpeg-2 aac with adts packet:0x4143
vorbis ffmpeg format:0x566f
vorbis 1:0x674f
vorbis 1 plus:0x676f
vorbis 2:0x6750
vorbis 2 plus:0x6770
vorbis 3:0x6751
vorbis 3 plus:0x6771
pcm extended:0xfffe
vorbis (with OggSwap):0xfffe
f1ac:0xf1ac
amr-nb:0x0057
amr-wb:0x0058
字幕
srt
ssa
aas
ASF
支持ASF文件。常见扩展名包括.asf、.wma、.wmv、.dvr-ms。ASF中支持以下格式的视频、音频。(ASF中不含字幕流)
视频 FourCC
支持包含在AVI中列出的所有视频格式。
音频 FormatTag
支持包含在AVI中列出的所有音频格式。
REAL
支持REAL文件。常见扩展名包括.rm、.rmvb、.ra、.rv。REAL中支持以下格式的视频、音频。(REAL中不含字幕流)
视频 CodecId
RV10
RV20
RV30
RV40
RVTR:与RV20相同
音频:支持以下CodecId 的音频
Dolby AC3(RealAudio 3):dnet
G2/Cook(RealAudio 6):cook,其中cook多声道暂不支持
Mpeg-2 AAC(RealAudio 9):raac
Mpeg-4 HE-AAC(RealAudio 10):racp
MP4
支持MP4文件。常见扩展名包括.mp4、.m4s、.qt、.mov、.3gp、.3gpp、.3g2、.f4v。MP4中支持以下格式的视频、音频、字幕
视频
Mpeg-1 Video:mpg1、MPG1
Mpeg-2 Video:mpg2、mpeg、MPG2、MPEG
Mpeg-4 Video:mp4v、xvid、XVID、divx、DIVX、DX50
H.264:avc1、h264、H264、x264、X264
H.263:h263、s263、H263、x263、X263
VC-1:WMV3
Microsoft Video:WMV2、WMV1、MP43、DIV3、MPG3、MP42、MPG4、MP41、MSS1、MSS2、WMVP、WVP2
Motion Jpeg:jpeg、MJPG、mjpa、mjpb
RGB:raw_、8BPS
YUV:yuv、qcif、uyvy、vyuv、yuy2、yvyu
音频
Mpeg-4 AAC/Ogg Vorbis:mp4a
AMR_NB:samr
AMR_WB:sawb
QDesign music version 2:QDM2
PCM:NONE、raw、twos、sowt
QuickTime Adpcm:ima4
Floating Point、fl32、fl64
Integer:in24、in32
aLaw:alaw
uLaw:ulaw
Microsoft Adpcm:0x6d730002
DVI/Intel IMA Adpcm:0x6d730011
Mpeg-1 Audio Layer Ⅲ:.mp3
Mpeg-1 Audio Layer Ⅱ:.mp1、.mp2
AC-3:ac-3、sac3
DTS:dts1、dsts
Microsoft Audio:WMA1、WMA2、WMA3、0x6d730160、0x6d730161、0x6d730162、0x6d730163、0x6d73000a
Ogg Vorbis:OggV。
字幕:支持MP4内嵌的字幕
text
tx3g
FLV
支持各种格式的FLV文件。扩展名为.flv。FLV中支持一以下视频、音频。(FLV中不含字幕流)
视频 CodecId
Sorenson H.263
Screen video
AVC
音频Sound Format
ADPCM
MP3
Linear PCM little endian
AAC。
OGG
支持各种OGG文件。常见扩展名为.ogg、.ogm、.ogv。OGG中支持以下格式的视频、音频、字幕。
视频
支持在ASF中列出的视频格式,还支持theora video。
音频
flac:flac、fLac
vorbis
字幕
支持OGG中内嵌的字幕
MKV
支持各种MKV文件。常见扩展名为.mkv、.mka、.mks。MKV中支持以下格式的视频
音频、字幕。
视频 CodecId
Avi
Mpeg-1 Video
Mpeg-2 Video
H.264
Mpeg-4 Video
RV10 real Video
RV20 real Video
RV30 real Video
RV40 real Video
QuickTime Video
音频 CodecID
Mpeg-2 aac
AC3
DTS
MpeG-1 Audio
Vorbis
Real Cook
flac
PCM
qdesign music version 2。
字幕 CodecId
srt
ssa
ass
pgs
WAVE
支持wave音频,扩展名为.wav。WAVE中支持以下格式的音频。
lpcm:0x0001
ms_adpcm:0x0002
float pcm:0x0003
a-law:0x0006
mu-law:0x0007
ima-adpcm:0x0011
creative_adpcm:0x0200
Mpeg-1 Audio Layer Ⅰ/Ⅱ:0x50
Mpeg-1 Audio Layer Ⅲ:0x55
AC-3:0x2000
DTS:0x2001
wma1:0x160
wma2:0x161
wma Professional:0x162
wma lossess:0x163
wma speech 9
aac with raw data block:0xff
Mpeg-2 aac with adts packet:0x706d、0x4143
ES Audio
Mpeg-1 Audio:.mp1、.mp2、.mp3、.mpa、.m1a,支持mp3 pro
Mpeg-2/Mpeg-4 AAC:.aac、.m2a、.adts、.adif
AMR:.amr、.awb、.awp
AC-3:.ac3、.eac3
DTS:.dts
APE:.ape
FLAC:.flac
WMA:.wma
PCM:.pcm
ES Video
Mpeg-1 Video:.m1v
Mpeg-2 Video:.m2v、.mpv
Mpeg-4 Video:.m4v
H.264:.264、.h264、.avc
VC-1:.rcv、.vc1
Yuv:.yuv、.qcif、.uyvy、.vyuv、.yuy2、.yvyu
Picture
JPEG:.jpg、.jpeg
GIF:.gif
PNG:.png
BITMAP:.bmp、.dib
音频编解码格式
*MPEG Audio Layer 1/2
*MPEG Audio Layer 3(MP3)
*MPEG2 AAC
*MPEG4 AAC
*Windows Media audeo v1/v2/7/8/9
*RealAudio cook/sipro(real media series)
*RealAudio AAC/AACPlus(real media series)
*QDesign Music 2(apple series)
是QDesign 公司开发的用于高保真高压缩率的编码方式,类似于MP3,不过比MP3要先进。支持流式播放.
*Apple MPEG-4 AAC(apple series)
*ogg(ogg vorbis音频)
*AC3(DVD 专用音频编码)
*DTS(DVD 专用音频编码)
*APE(monkey’s 音频)
*AU(sun 格式)
*FLAC(fress lossless 音频)
*M4A(mpeg-4音频)(苹果改用的名字,可以改成.mp4)
*MP2(mpeg audio layer2音频)
*MWA
视频编解码格式
*MPEG1(VCD)
*MPEG2(DVD)
*MPEG4(divx,xvid)
*MPEG4 AVC/h.264
*h.261
*h.262
*h.263
*h.263+
*h.263++
*MPEG-4 v1/v2/v3(微软windows media系列)
*Windows Media Video 7/8/9/10
*Sorenson Video 3(用于QT5,成标准了)(apple series)
*RealVideo G2(real media series)
*RealVideo 8/9/10(real media series)
*Apple MPEG-4(apple series)
*Apple H.264(apple series)
*flash video
音、视频文件格式
*说明:首先要分清楚媒体文件和编码的区别:文件是既包括视频又包括音频、甚至还带有脚本的一个集合,也可以叫容器;文件当中的视频和音频的压缩算法才是具体的编码。
*AVI
音视频交互存储,最常见的音频视频容器。支持的视频音频编码也是最多的
*MPG
MPEG编码采用的音频视频容器,具有流的特性。里面又分为 PS,TS 等,PS 主要用于 DVD 存储,TS 主要用于 HDTV。
*VOB
DVD采用的音频视频容器格式(即视频MPEG-2,音频用AC3或者DTS),支持多视频多音轨多字幕章节等。
*MP4
MPEG-4编码采用的音频视频容器,基于 QuickTime MOV 开发,具有许多先进特性。
*3GP
3GPP视频采用的格式,主要用于流媒体传送。
*ASF
Windows Media 采用的音频视频容器,能够用于流传送,还能包容脚本等。
*RM
RealMedia 采用的音频视频容器,用于流传送。
*MOV
QuickTime 的音频视频容器,恐怕也是现今最强大的容器,甚至支持虚拟现实技术,Java 等,它的变种 MP4,3GP都没有这么厉害。
*MKV
MKV 它能把 Windows Media Video,RealVideo,MPEG-4 等视频音频融为一个文件,而且支持多音轨,支持章节字幕等。
*WAV
一种音频容器(注意:只是音频),大家常说的 WAV 就是没有压缩的 PCM 编码,其实 WAV 里面还可以包括 MP3 等其他 ACM 压缩编码。
音、视频技术
VCD
DVD
DVD目录是如何工作的
Audio CD
*标准CD格式也就是44.1K的采样频率,速率88K/秒,16位量化位数
**.cda格式,这就是CD音轨了,一个CD音频文件是一个*.cda文件,这只是一个索引信息,并不是真正的包含声音信息,所以不论CD音乐的长短,在电脑上看到的“*.cda文件”都是44字节长
MP3
*MPEG音频文件的压缩是一种有损压缩,MPEG3音频编码具有10:1~12:1的高压缩率,同时基本保持低音频部分不失真,但是牺牲了声音文件中12KHz到16KHz高音频这部分的质量来换取文件的尺寸,相同长度的音乐文件,用*.mp3格式来储存,一般只有*.wav文件的1/10,而音质要次于CD格式或WAV格式的声音文件
*MP3格式压缩音乐的采样频率有很多种,可以用64Kbps或更低的采样频率节省空间,也可以用320Kbps的标准达到极高的音质
*每分钟音乐的MP3格式只有1MB左右大小
MIDI:
经常玩音乐的人应该常听到MIDI(Musical Instrument Digital Interface)这个词,MIDI允许数字合成器和其他设备交换数据。MID文件格式由MIDI继承而来。MID文件并不是一段录制好的声音,而是记录声音的信息,然后在告诉声卡如何再现音乐的一组指令。这样一个MIDI文件每存1分钟的音乐只用大约5~10KB。今天,MID文件主要用于原始乐器作品,流行歌曲的业余表演,游戏音轨以及电子贺卡等。*.mid文件重放的效果完全依赖声卡的档次。*.mid格式的最大用处是在电脑作曲领域。*.mid文件可以用作曲软件写出,也可以通过声卡的MIDI口把外接音序器演奏的乐曲输入电脑里,制成*.mid文件。
WMA:
*WMA的压缩率一般都可以达到1:18左右,WMA的另一个优点是内容提供商可以通过DRM(Digital Rights Management)方案如Windows Media Rights Manager 7加入防拷贝保护。这种内置了版权保护技术可以限制播放时间和播放次数甚至于播放的机器等等,这对被盗版搅得焦头乱额的音乐公司来说可是一个福音,另外WMA还支持音频流(Stream)技术,适合在网络上在线播放
* WMA这种格式在录制时可以对音质进行调节。同一格式,音质好的可与CD媲美,压缩率较高的可用于网络广播
以文件名标识识别音频编码格式
*.aac
音频编码:aac
*.ac3
音频编码:ac3
*.ape
*.au
音频编码:pcm_s16be
*.m4a
音频编码:mpeg4 aac
*.mp2
*.mp3
*.ogg
音频编码:vorbis
*.wav
音频编码:pcm_s16le
*.flav
*.wma
音频编码:wma7x
以文件名标识识别音频编码格式
1.*.MP4 (MP4 MPEG-4视频)
视频编码:mpeg4
音频编码:mpeg4 aac
2.*.3gp (3GPP 第三代合作项目)
视频编码:mpeg4
音频编码:amr_nb((mono, 8000 Hz, Sample Depth 16 bit, bitrate 12 kbps)
3.*.3g2 (3GPP 第三代合作项目2)
视频编码:mpeg4
音频编码:mpeg4 aac
4.*.asf (ASF 高级流格式)
视频编码:msmpeg4
音频编码:mp3
5.*.avi (AVI 音视频交错格式)
视频编码:mpeg4
音频编码:pcm_s161e
6.*.avi (divx 影片)
视频编码:mpeg4
音频编码:mp3
7.*.avi(xvid 视频)
视频编码:Xvid
音频编码:mp3
8.*.vob (DVD)
视频编码:mpeg2 video
音频编码:ac3
9.*.flv (flash 视频格式)
视频编码:
音频编码:mp3
10.*.mp4 (iPod 320*240 MPEG-4 视频格式)
视频编码:mpeg4
音频编码:mpeg4 aac
11.*.mp4(iPod video2 640*480 MPEG-4 视频格式)
视频编码:mpeg4
音频编码:mpeg4 aac
12.*.mov (MOV 苹果quicktime 格式)
视频编码:mpeg4_qt
音频编码:mpeg4 aac_qt
13.*.mpg (mpeg1影片)
视频编码:mpeg1 video
音频编码:mp2
14.*.mpg (mpeg2 影片)
视频编码:mpeg2 video
音频编码:mp2
15.*.mp4 (mpeg4 avc 视频格式)
视频编码:h.264
音频编码:mpeg4 aac
16.*.mp4 (PSP mpeg4 影片)
视频编码:Xvid
音频编码:mpeg4 aac
17.*.mp4 (PSP AVC 视频格式)
视频编码:h.264
音频编码:mpeg4 aac
18.*.rm (RM realvideo)
视频编码:rv10
音频编码:ac3
19.*.mpg (超级VCD)
视频编码:mpeg2 video
音频编码:mp2
20.*.swf (SWF 格式)
视频编码:
音频编码:mp3
21.*.mpg (video CD 格式)
视频编码:mpeg1 video
音频编码:mp2
22.*.vob (mpeg2 ps格式)
视频编码:mpeg2 video
音频编码:ac3
23.*.wmv(windows 视频格式)
视频编码:wmv3x
音频编码:wma7x
1. 移动端原生音频支持
1.1 android Supported media formats
https://developer.android.com/guide/topics/media/media-formats
Format / CodecEncoderDecoderDetailsSupported File Type(s) / Container Formats
AAC LC••Support for mono/stereo/5.0/5.1 content with standard sampling rates from 8 to 48 kHz.• 3GPP (.3gp)
• MPEG-4 (.mp4, .m4a)
• ADTS raw AAC (.aac, decode in Android 3.1+, encode in Android 4.0+, ADIF not supported)
• MPEG-TS (.ts, not seekable, Android 3.0+)
HE-AACv1 (AAC+)•
(Android 4.1+)
•
HE-AACv2 (enhanced AAC+)•Support for stereo/5.0/5.1 content with standard sampling rates from 8 to 48 kHz.
AAC ELD (enhanced low delay AAC)•
(Android 4.1+)
•
(Android 4.1+)
Support for mono/stereo content with standard sampling rates from 16 to 48 kHz
AMR-NB••4.75 to 12.2 kbps sampled @ 8kHz3GPP (.3gp)
AMR-WB••9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16kHz3GPP (.3gp)
FLAC•
(Android 4.1+)
•
(Android 3.1+)
Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1 kHz is recommended on devices with 44.1 kHz output, as the 48 to 44.1 kHz downsampler does not include a low-pass filter). 16-bit recommendedno dither applied for 24-bit.FLAC (.flac) only
MIDI•MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for ringtone formats RTTTL/RTX, OTA, and iMelody• Type 0 and 1 (.mid, .xmf, .mxmf)
• RTTTL/RTX (.rtttl, .rtx)
• OTA (.ota)
• iMelody (.imy)
MP3•Mono/Stereo 8-320Kbps constant (CBR) or variable bit-rate (VBR)MP3 (.mp3)
Opus•
(Android 5.0+)
Matroska (.mkv)
PCM/WAVE•
(Android 4.1+)
•8- and 16-bit linear PCM (rates up to limit of hardware). Sampling rates for raw PCM recordings at 8000, 16000 and 44100 Hz.WAVE (.wav)
Vorbis•• Ogg (.ogg)
• Matroska (.mkv, Android 4.0+)
1.2 Supported Audio File and Data Formats in OS X
https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html
Allowable data formats for each file format.
File FormatData Formats
AAC (.aac, .adts)'aac '
AC3 (.ac3)'ac-3'
AIFC (.aif, .aiff,.aifc)BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, 'ulaw', 'alaw', 'MAC3', 'MAC6', 'ima4' , 'QDMC', 'QDM2', 'Qclp', 'agsm'
AIFF (.aiff)BEI8, BEI16, BEI24, BEI32
Apple Core Audio Format (.caf)'.mp3', 'MAC3', 'MAC6', 'QDM2', 'QDMC', 'Qclp', 'Qclq', 'aac ', 'agsm', 'alac', 'alaw', 'drms', 'dvi ', 'ima4', 'lpc ', BEI8, BEI16, BEI24,BEI32, BEF32, BEF64, LEI16, LEI24, LEI32, LEF32, LEF64, 'ms\x00\x02', 'ms\x00\x11', 'ms\x001', 'ms\x00U', 'ms \x00', 'samr', 'ulaw'
MPEG Layer 3 (.mp3)'.mp3'
MPEG 4 Audio (.mp4)'aac '
MPEG 4 Audio (.m4a)'aac ', alac'
NeXT/Sun Audio (.snd, .au)BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, 'ulaw'
Sound Designer II (.sd2)BEI8, BEI16, BEI24, BEI32
WAVE (.wav)LEUI8, LEI16, LEI24, LEI32, LEF32, LEF64, 'ulaw', 'alaw'
Core Audio includes a number of audio codecs that translate audio data to and from Linear PCM. Codecs for the following audio data type are available in OS X v10.4. Audio applications may install additional encoders and decoders.
Audio data typeEncode from linear PCM?Decode to linear PCM?
MPEG Layer 3 ('.mp3')NoYes
MACE 3:1 ('MAC3')YesYes
MACE 6:1 ('MAC6')YesYes
QDesign Music 2 ('QDM2')YesYes
QDesign ('QDMC')NoYes
Qualcomm PureVoice ('Qclp')YesYes
Qualcomm QCELP ('qclq')NoYes
AAC ('aac ')YesYes
Apple Lossless ('alac')YesYes
Apple GSM 10:1 ('agsm')NoYes
ALaw 2:1 'alaw')YesYes
Apple DRM Audio Decoder ('drms')NoYes
AC-3NoNo
DVI 4:1 ('dvi ')NoYes
Apple IMA 4:1 ('ima4')YesYes
LPC 23:1 ('lpc ')NoYes
Microsoft ADPCMNoYes
DVI ADPCMYesYes
GSM610NoYes
AMR Narrowband ('samr')YesYes
µLaw 2:1 ('ulaw')YesYes
1.3 总结:
android/ios都可以对mp3解码,但不能编码,编码依赖lame
android/ios支持对aac进行编解码
mp3,aac均是音乐编码器,android支持对amr窄带与宽带编解码,ios文档显示对窄带支持编解码,但有人说ios4.3.x版本之后不再支持AMR,剔除了AMR的硬解,如需使用依赖libopencore库
结论:
h5 audio标签对mp3支持最好(audio标签除了firefox与opera都支持mp3,ogg,wavflash播放器可以支持到mp3,aac,speex,nellymoser),考虑对纯web的兼容性,使用mp3
android,ios硬件对aac支持最好,考虑硬编码的性能与效率,使用aac
amr是语音编码器,考虑使用场景,推荐amr.
对比微信,微信短语音,6.0之前用的amr,6.0之后用的silk_v3.
2.音频基础概念
2.1声音三要素
声音的特性可由三个要素来描述,即响度、音调和音色。
响度:人耳对声音强弱的主观感觉称为响度。响度和声波振动的幅度有关。一般说来,声波振动幅度越大则响度也越大。当我们用较大的力量敲鼓时,鼓膜振动的幅度大,发出的声音响;轻轻敲鼓时,鼓膜振动的幅度小,发出的声音弱。音叉振动时发出的声波为单音,即只有一个频率成分。若设法将音叉的振动规律记录下来,可发现其振动波形为一正弦波。当用不同力量敲击某个音叉时,音叉发出的声波幅度不同,这意味着声音的响度不同。给出了两个声音波形,其幅度一大一小,幅度大的波形其声音响度大,幅度小的波形其声音响度小。另外,人们对响度的感觉还和声波的频率有关,同样强度的声波,如果其频率不同,人耳感觉到的响度也不同。
音调:人耳对声音高低的感觉称为音调。音调主要与声波的频率有关。声波的频率高,则音调也高。当我们分别敲击一个小鼓和一个大鼓时,会感觉它们所发出的声音不同。小鼓被敲击后振动频率快,发出的声音比较清脆,即音调较高;而大鼓被敲击后振动频率较慢,发出的声音比较低沉,即音调较低。如果分别敲击一个小音叉和一个大音叉时,同样会感觉到小音叉所发声音的音调较高,大音叉所发声音音调较低。如果设法把大、小音叉所发出的声波记录下来,可发现小音叉在单位时间内振动的次数多,即频率高,大音叉在单位时间内振动的次数少,即频率低。给出了两个频率不同的声音波形,从声音可听出,频率高的声音波形听起来音调较高,而频率低的声音波形听起来则音调较低。
音色:音色是人们区别具有同样响度、同样音调的两个声音之所以不同的特性,或者说是人耳对各种频率、各种强度的声波的综合反应。音色与声波的振动波形有关,或者说与声音的频谱结构有关。前面说过,音叉可产生一个单一频率的声波,其波形为正弦波。但实际上人们在自然界中听到的绝大部分声音都具有非常复杂的波形,这些波形由基波和多种谐波构成。谐波的多少和强弱构成了不同的音色。各种发声物体在发出同一音调声音时,其基波成分相同。但由于谐波的多少不同,并且各次谐波的幅度各异,因而产生了不同的音色。例如当我们听胡琴和扬琴等乐器同奏一个曲子时,虽然它们的音调相同,但我们却能把不同乐器的声音区别开来。这是因为,各种乐器的发音材料和结构不同,它们发出同一个音调的声音时,虽然基波相同,但谐波构成不同,因此产生的波形不同,从而造成音色不同。给出了小提琴和钢琴的波形和声音,这两个声音的响度和音调都是相同的,但听起来却不一样,这就是因为这两个声音的音色不同(波形不同)。
2.2采样率和采样大小
声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,**为了复原波形,一次振动中,必须有2个点的采样**,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率。我们常见的CD,采样率为44.1kHz。光有频率信息是不够的,我们还必须获得该频率的能量值并量化,用于表示信号强度。量化电平数为2的整数次幂,我们常见的CD位16bit的采样大小,即2的16次方。采样大小相对采样率更难理解,因为要显得抽象点,举个简单例子:假设对一个波进行8次采样,采样点分别对应的能量值分别为A1-A8,但我们只使用2bit的采样大小,结果我们只能保留A1-A8中4个点的值而舍弃另外4个。如果我们进行3bit的采样大小,则刚好记录下8个点的所有信息。采样率和采样大小的值越大,记录的波形更接近原始信号。
2.3有损和无损
根据采样率和采样大小可以得知,相对自然界的信号,音频编码最多只能做到无限接近,至少目前的技术只能这样了,相对自然界的信号,任何数字音频编码方案都是有损的,因为无法完全还原。在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。因此,PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。我们而习惯性的把MP3列入有损音频编码范畴,是相对PCM编码的。强调编码的相对性的有损和无损,是为了告诉大家,要做到真正的无损是困难的,就像用数字去表达圆周率,不管精度多高,也只是无限接近,而不是真正等于圆周率的值。
2.4频率与采样率的关系
采样率表示了每秒对原始信号采样的次数,我们常见到的音频文件采样率多为44.1KHz,这意味着什么呢?假设我们有2段正弦波信号,分别为20Hz和20KHz,长度均为一秒钟,以对应我们能听到的最低频和最高频,分别对这两段信号进行40KHz的采样,我们可以得到一个什么样的结果呢?结果是:20Hz的信号每次振动被采样了40K/20=2000次,而20K的信号每次振动只有2次采样。显然,在相同的采样率下,记录低频的信息远比高频的详细。这也是为什么有些音响发烧友指责CD有数码声不够真实的原因,CD的44.1KHz采样也无法保证高频信号被较好记录。要较好的记录高频信号,看来需要更高的采样率,于是有些朋友在捕捉CD音轨的时候使用48KHz的采样率,这是不可取的!这其实对音质没有任何好处,对抓轨软件来说,保持和CD提供的44.1KHz一样的采样率才是最佳音质的保证之一,而不是去提高它。较高的采样率只有相对模拟信号的时候才有用,如果被采样的信号是数字的,请不要去尝试提高采样率。
亨利·奈奎斯特(Harry Nyquist)采样定理:当对连续变化的信号波形进行采样时,若采样率fs高于该信号所含最高频率的两倍,那么可以由采样值通过插补技术正确的回复原信号中的波形,否则将会引起频谱混叠(Aliasing),产生混叠噪音(Aliasing Noise),而重叠的部分是不能恢复的.(同样适用于模拟视频信号的采样)
根据人声语音的特点,人类的听力感知范围是从20Hz到20kHz。这个频宽范围被划分成四个频宽类别:窄带、宽带、超宽带和全带。
窄带(narrowband)普通电话所覆盖的频宽,从300Hz到3.4kHz,对应采样率6.8kHz。普通电话的采样率是8kHz,对应频宽4kHz,对于人声语音是足够的。
宽带(wideband)从50Hz到7kH的频宽,对应采样率14khz,可以很好地捕捉和还原人声,然而对于音乐声还是不够的。这是在人声语音通话场景下的所谓高清语音。
超宽带(super-wideband)从50Hz到14kHz,对应采样率28kHz,基本可以覆盖人声和音乐声,对于非专业音乐人的用户来说,不管是人声通话还是音乐直播,这样的频宽都是足够的。
全带(fullband)从20Hz到20kHz,对应40kHz采样率,全面覆盖人类的听觉范围,能够满足音乐发烧友或者专业音乐人的需求。超过40Hz都可以称作全带语音。CD的采样率就是44.1kHz。
因此,窄带(narrowband)的音质是能满足人声录制回放的。
从四个角度衡量音频编码:
成本:开发成本,服务器流量成本
音质:
系统影响:对系统资源的暂用,软编解码器比硬编解码器占用更多cpu
兼容性:对移动端以及web端的兼容
适合产品场景的编码器具备以下四个特点
码率相对低,满足成本可控的要求,一般不要超过16kbps。一个sample用1bit就能编好,那么8kHz采样率(narrowband)对应8kbps的码率,16kHz采样率(wideband)对应16kbps的码率。码率的本质就是成本。
算法复杂度要比较低,对系统CPU、内存和电量消耗少,对系统影响要尽量低。
音质可以适当作出牺牲,以保障上面三个因素,8kHz采样率对人声场景是够用的,16kHz采样率可以提供高清语音。
兼顾兼容性
3.主流音频编码器
音频编码格式的比较: https://zh.wikipedia.org/wiki/%E9%9F%B3%E9%A2%91%E7%BC%96%E7%A0%81%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%AF%94%E8%BE%83
下图列举一组主流的音频编解码器,展示了随着码率变化,音质相应变化的情况。这是基于编解码器听音测试的结果绘画出来的,对选取音频编解码器有参考意义。根据上面的分析并且参照下图,发现码率低于16kbps的低码率人声编解码器(speech codecs)包含:Opus(SILK),Speex,AMR-NB,AMR-WB,和iLBC。
下图是另外一组主流的音频编解码器,展示了随着码率的变化,算法延迟时间相应变化的情况。根据上面的分析并且参照下图,发现算法延迟时间低于60毫秒,码率低于16kbps的人声编解码器(speech codecs)包含:Opus(SILK)、Speex(NB,WB)、G.729、和G.729.1。
从图中我们可以获得如下几方面信息:
对于固定码率的编码标准:如G.711或者G.722,图中采用单点表示,说明这两个编码标准是固定码率编码标准。其他如Opus、Speex,它们的曲线是连续的,说明这类编码标准是可变码率的编码标准。
从频带方面看:G.711、G.722、AMR和iLBC等标准适用于narrowband(8khz采样率)和wideband(16khz采样率)范围,针对普通的语音通话场景。AAC和MP3适用于fullband(48khz采样率)范围,针对特殊的音乐场景。而Opus适用于整个频带,可以进行最大范围的动态调节,适用范围最广。
从标准的收费情况看:适用于互联网传输的iLBC、Speex和Opus都是免费且开源的;适用于音乐场景的MP3和AAC,需要license授权,而且不开源。
综合上面的两个图,我们可以大致总结,比较适合人声短语音的音频编解码器包含Opus(SILK)、Speex(NB,WB)、AMR-NB、AMR-WB、iLBC、G.729、和G.729.1。
码率采样率算法延迟
OPUS(SILK)6-12,7-25,
8-30,12-40kbps
8,12,
16,24kHz
25ms
Speex2.15–24.6 kbps (NB)
4–44.2 kbps (WB)
8, 16,
32, 48kHz
30 ms(NB)
34 ms (WB)
AMR-NB4.75, 5.15, 5.90,
6.70, 7.40, 7.95,
10.20, 12.20 kbps
8kHz25ms (20ms per frame
plus 5ms look-ahead,
20ms for 12.2 kbps)
AMR-WB6.60, 8.85, 12.65,14.25, 15.85, 18.25, 19.85, 23.05, 23.85 kbps16kHz25ms (20ms per frame
plus 5ms look-ahead)
iLBC13.33 kbps
15.20 kbps
8kHz25 ms
40 ms
G.7298kbps8kHz15 ms
G.729.18 kbps,
12–32 kbps
8kHz
16kHz
48.94ms
Codec20.7, 1.2, 1.3, 1.4,
1.6, 2.4, 3.2 kbps
8kHz20–40 ms
(额外增加的,超低码率)
短语音不同于实时语音,可以忽略延迟
上面都是为人声场景设计的低码率音频编解码器,具有码率低(16kbps以下),算法延迟低(大部分在40ms以下),和采样率在8kHz和16kHz之间的特点,都可供短语音编码方案选择。其中,有几个语音编解码器值得在这里稍作介绍:
Opus(SILK)
https://en.wikipedia.org/wiki/Opus_(audio_format)
完全开源而且免费,包含了SILK、CELT、以及两者的混合模式,是目前最为兼容并包的音频编解码器。在处理窄带和宽带人声语音(speech)的时候,采用SILK在处理超宽带和全带音乐声音(music)的时候,采用CELT。在人声和音乐声混合的场景中,甚至可以智能切换两个编解码器。WebRTC就采用了Opus作为语音编解码器。而SILK是Skype网络电话所用的语音编解码器。Opus真可谓是久经考验的名门精品。根据即构科技的测试结果,Opus虽然在音乐场景中表现并非首选,但是在人声场景中表现十分出色。
iLBC
完全开源而且免费的,由GIPS开发并被IETF标准化,曾经被QQ和Skype使用过,现在被WebRTC使用,是被世界顶级产品证明过的窄带实时语音编解码器。iLBC能够通过平滑降低语音质量的方式来处理IP网络丢包。由于iLBC的语音帧块之间是相互独立的,在丢帧出现的时候也不会导致错误蔓延,因此具有较强的抗丢包能力。在窄带应用环境中,iLBC具有延迟低,无断续或杂音的特点,通话效果可以和移动电话媲美。
Speex
免费的人声音频编解码器。因为Speex是为VoIP专门设计的,所以Speex对IP网络有很强的抗丢包能力。为了达到这个目的,Speex采用了CELP算法。市场上狼人杀产品的游戏实时语音技术,厂商自研的方案采用了Speex。
Codec2
开源并且专利免费,码率超低的人声语音编解码器。码率在0.7 kbps至3.2 kbps。Codec2填补了开源编码器在5 kbps码率以下的空白。
评估音频编码指标,除码率、采样率、和算法延迟以外,还要参考MOS、VBR/CBR、和基础算法等。其中,MOS (Mean Opinion Score)是语音编解码器的主观评估指标。MOS是一个广为接受的有统计意义的主观听音指标。上面音视频编解码器的列表没有把它包含进去,是因为同一个编解码器,在不同码率下,表现出来的MOS值是会变化的。对一个音频编解码器给出一个固定的MOS值,反而会起误导的作用。另外,虽然MOS值已经是主观的听觉测试评估结果,但是音频工程师在选用音频编解码器的时候,还要以自己亲身的听感作为最终的依据。
下图是Nokia在2011年的时候对Opus、AMR、和G.722.1C等音频编解码器在无噪音和有噪音的环境里做的MOS语音测试的结果。我们可以从语音测试的结果看出:
1)MOS值会随着码率变化。固定的MOS值并没有绝对的参考意义。
2)在低码率情况下,AMR-NB和AMR-WB都表现相对出色。
参考:
1.Getting Started with Audio &Video: https://developer.apple.com/library/content/referencelibrary/GettingStarted/GS_MusicAudio/_index.html
2.Opus ios: https://github.com/chrisballinger/Opus-iOS
3.android opus: https://gitlab.com/axet/android-opus
4.opus_android: https://github.com/louisyonge/opus_android
5.opuscodec: https://github.com/martoreto/opuscodec
6.与大家讨论如何用opencore amr在iOS上decode: https://blog.csdn.net/devday/article/details/6804553
7. ios支持 https://developer.apple.com/library/archive/documentation/MusicAudio/Conceptual/CoreAudioOverview/CoreAudioEssentials/CoreAudioEssentials.html#//apple_ref/doc/uid/TP40003577-CH10-SW13
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)