个人开发历程知识库

关注C++/Java/C#技术, 致力于安防监控/移动应用/WEB方面开发
------------------------------------ 业精于勤,荒于嬉;行成于思,毁于随
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[转载]3GP文件格式研究

Posted on 2009-05-15 22:06  peterzb  阅读(6507)  评论(0编辑  收藏  举报
原文来自: 无极 - CSDN博客 http://blog.csdn.net/windcao/archive/2006/05/12/725722.aspx

序言

06我开始做3gp文件的播放器,但是关于3gp的文档太少了也很难找,在网友luxh的帮助下,
我终于有了第一份关于3gp文件格式的文档《ISO/IEC 14496-12,ISO媒体文件格式》.
在此真心感谢luxh的贡献.
当然了是英文版的,有文档就不错了.为了便于查阅和理解,我把之后陆续找到的其他几个文档也揉在了一起.
从06年5月12日到现在2007-3-23,一点点的挤时间,总算写完了.如有错误,敬请斧正.
之所以写这篇文章目的只有一个,希望大家都能够少走弯路.
有用的到的人可以随意复制,转贴.
因为以后我有可能会对本文修改更新,所以请保留文中的原始链接.
愿意同我一道研究的人请加msn:windcao@hotmail.com

需要看的文档
http://www.3gpp.org/ftp/Specs/archive/26_series/
3GPP TS 26.233
3GPP TS 26.243
3GPP TS 26.244


luxh找到的一个好东西
http://isotc.iso.org/livelink/livelink/fetch/2000/2489/Ittf_Home/PubliclyAvailableStandards.htm
大家一定要仔细找找啊,宝藏!
我们研究3gpp文件最重要的两个文档就是《ISO/IEC 14496-12,ISO媒体文件格式》和《3GPP TS 26.244-700》


ISO/IEC 14496的组成如下:(引自:http://www.blogcn.com/user73/lipingfu/index.html
(1)ISO/IEC 14496-1,系统部分,描述了组成一个场景的音频和视频成分之间的关系。
(2、3)ISO/IEC 14496-2,视频部分和ISO/IEC 14496-3音频部分,分别规定自然的和合成的视频对象、音频对象的编码表示。
(4)ISO/IEC 14496-4,一致性测试部分,定义了比特流和设备的一致性条件,用来测试MPEG-4的实现。
(5)ISO/IEC 14496-5,参考软件,包括与MPEG-4的主要部分相对应的软件。
(6)ISO/IEC 14496-6,多媒体传送整体框架DMIF,这是MPEG-4应用层与传输网络的接口,定义了通信协议,使MPEG-4系统的数据流能进入各种传输网络。还包含一个存储格式MP4,用于存储编码的场景。
(7) ISO/IEC 14496-7,为MPEG-4工具优化软件,提供了对实现进行优化的例子(这里的实现指的是第五部分)。
(8)ISO/IEC 14496-8,定义了在IP网络上传输MPEG-4内容的方式。
(9)ISO/IEC 14496-9,为参考硬件描述,提供了用于演示怎样在硬件上实现本标准其他部分功能的硬件设计方案。
(10)ISO/IEC 14496-10,高级视频编码AVC,定义了一个被称为AVC的视频编解码器。
(11)ISO/IEC 14496-11,场景描述和应用引擎。
(12)ISO/IEC 14496-12,ISO媒体文件格式,定义了一个存储媒体内容的文件格式。
(13)ISO/IEC 14496-13,知识产权管理和保护(IPMP)扩展。
(14)ISO/IEC 14496-14,MP4文件格式,定义了基于第十二部分的用于存储MPEG-4内容的容器文件格式。
(15)ISO/IEC 14496-15,AVC文件格式,定义了基于第十二部分的用于存储第十部分的视频内容的文件格式。
(16)ISO/IEC 14496-16,动画框架扩展AFX(Animation Framework eXtension)。
(17)ISO/IEC 14496-17,同步文本字幕格式(尚未完成,2005年1月达成"最终委员会草案"。
(18)ISO/IEC 14496-18,字体压缩和流式传输(针对公开字体格式)。
(19)ISO/IEC 14496-19,综合材质流(Synthesized Texture Stream)。
(20)ISO/IEC 14496-20,简单场景表示(尚未完成,2005年1月达成"最终委员会草案"。
(21)ISO/IEC 14496-21,用于描绘(Rendering)的MPEG-J拓展(尚未完成,2005年1月达成"委员会草案"

我做的一个辅助工具http://download.csdn.net/source/162821 3gpp文件结构查看器
目前最新版本是0.1.3

这个工具的源码:http://download.csdn.net/source/162682

正文:
首先来说3gp文件相当于一个容器,本身没有什么具体的编码解码规则。
我们可以选择编码方式
- AMR narrow-band:编码简称'samr' 常用与语言片段的压缩,可以对声音片段进行最大程度的压缩,但是失真较大,如果用在音乐文件上结构常常是无法忍受的。

(详情请参考:3GPP TS 26.071: "Mandatory Speech CODEC speech processing functions; AMR Speech CODEC; General description".)

- AMR wideband:编码简称'sawb' 相对AMR narrow-band来说压缩比降低了,品质有所提升可用来压缩音乐。

(详情请参考:3GPP TS 26.171: "AMR Wideband Speech Codec; General Description".)

- Extended AMR-WB codec编码简称 'sawp'

(详情请参考:
3GPP TS 26.290: "Extended AMR Wideband codec; Transcoding functions".
3GPP TS 26.304: "ANSI-C code for the Floating-point; Extended AMR Wideband codec".
3GPP TS 26.273: "ANSI-C code for the Fixed-point; Extended AMR Wideband codec".

- Enhanced aacPlus and MPEG-4 AAC codec编码简称 'mp4a'

(详情请参考:
3GPP TS 26.401: "General audio codec audio processing functions; Enhanced aacPlus general audio codec; General description".
3GPP TS 26.410: "General audio codec audio processing functions; Enhanced aacPlus general audio codec; Floating-point ANSI-C code".
3GPP TS 26.411: "General audio codec audio processing functions; Enhanced aacPlus general audio codec; Fixed-point ANSI-C code".

- MPEG-4 video codec编码简称'mp4v'

(详情请参考:ISO/IEC 14496-2:2004: "Information technology – Coding of audio-visual objects – Part 2: Visual".)

- H.263 video codec编码简称'h263'

(详情请参考:ITU-T Recommendation H.263 (01/05): "Video coding for low bit rate communication".)

- H.264 video codec编码简称'avc1'

(详情请参考:ITU-T Recommendation H.264 (03/05): "Advanced video coding for generic audiovisual services"
ISO/IEC 14496-10:2005: "Information technology – Coding of audio-visual objects – Part 10: Advanced Video Coding".)

- 3GPP timed text format 编码简称'tx3g'

(详情请参考:3GPP TS 26.245: "Transparent end-to-end packet switched streaming service (PSS); Timed text format".)

其中手机最普遍支持的格式是 amr(音频) +h263(视频)

 

 3gp文件基于mpeg4由若干个box组成

 一个3gp文件由若干个box组成常见的有:

文件类型包:(FileTypeBox,简称代码'ftyp')
ftyp:文件类型包相当于文件头,说明了文件所使用的协议版本,编码格式等信息
+[4]-+[4]-+[4]-+[4]-+[4]-+
|size|ftyp|mjbr|mivs|cpbr|
+----+----+----+----+----+
mjbr:major_brand 版本分支
mivs:minor_version 版本号 
cpbr:compatible_brands 兼容分支

媒体数据包:(Media Data Box,简称代码'mdat')
"Media Data Box
Box类型: ‘mdat’
容器: 文件
是否必须: 否
数量: 任意个. "-luxh

3gp file frame

mdat box 存放了音频视频和其他的数据,一般的文件至少有2个mdatbox, 一个用于音频,一个用于视频, 通常还会有一些文本信息也放在mdatbox中,各种信息的顺序不固定。 如果只是存放音乐一个mdat就够用了。

你可能会问这么多box 都叫mdat我怎么知道音频放哪里视频放哪里呢?别着急这些相关信息都放在moovbox里面

影片包:(moov box:Movie Box:)是一个3gp文件中最复杂最重要的文件。
moov box

看到这里你可能会问"moovbox里面的方框都分别代表什么含义呀?媒体描述信息是怎么存放的?",别着急咱们来慢慢分析一下。
"Movie Box
Box类型: 'moov';
容器: 文件
是否必须: 是
数量: 一个,并且只能是一个.

媒体的原始数据被放置在这个box中,这个box位于文件的最高级别,一般来说这个box接近于文件的开始或者末尾,尽管这并不被要求。语法如下:
a ligned(8) class MovieBox extends Box(‘moov’) {} "-luxh

moovbox 有两个必要的子box他们是影片头包和轨迹包
影片头包movie header,简称代码'mvhd'
首先剖析一下影片头包,顺便以此为例理解一下包的结构。
每一个包开头的4个字节都是一个整数存放了本包的长度。
接下来的4个字节是个字符串存放了本包的类型。如'moov','mvhd'。
基本上包都是这模样的:
+[4]-+[4]-+[size-8]-------------------+
|size|type|data                       |
+----+----+---------------------------+

很多box是这样的我们可以称之为全包(full box)(这里有块石头,大家小心了,不要把全包当成普通包来读,由于我提醒的不及时,网友陈秋松又在这里摔了一跤,抱歉)
+[4]-+[4]-+-+---+[size-8]-------------------+
|size|type|v|flg|data                       |
+----+----+-+---+---------------------------+

简记为
+[4]-+[4]-+[4]-+[size-8]-------------------+
|size|type|vsfl|data                       |
+----+----+----+---------------------------+

其中vsfl:版本号标志

+-+---+
|v|flg|
+-+---+
v :version
flg:flages

在影片头包中接下来的是版本标志等信息。
MVHD 是媒体信息头,存放媒体的全局性的信息。
+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[76]----...---------+[4]-+
|size|mvhd|vsfl|cttm|mdtm|tmsc|mxtl|reserved...         |ntid|
+----+----+----+----+----+----+----+--------...---------+----+
size:box长度
type:文件类型标识内容为"mvhd"
vsfl:版本号标志
cttm:creat time 文件创建时间
mdtm:modification time  文件修改时间
tmsc:timescale 时间缩放因数
mxtl:maxTrackLen duration of longest track 最长播放时间
reserved: 保留字段
ntid-next trak id  下一个频道标识

轨迹包TRAK 也是一个容器,是单个媒体流频道的信息的容器,它有两个必要的子box:TKHD,MDIA。
TKHD 存放本trak的信息,有两个版本
v=0
+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+
|size|tkhd|vsfl|cttm|mdtm|tkid|resv|duat|
+----+----+----+----+----+----+----+----+
+[12]--------+2-+2-+[36]----...-+[4]-+[4]-+
|reserved    |ct|rs|reserved    |twvo|thvo|
+------------+--+--+--------...-+----+----+
v=1
+[4]-+[4]-+[4]-+[8]-----+[8]-----+[4]-+[4]-+[8]-----+
|size|tkhd|vsfl|cttm    |mdtm    |tkid|resv|duat    |
+----+----+----+--------+--------+----+----+--------+
+[12]--------+2-+2-+[36]----...-+[4]-+[4]-+
|reserved    |ct|rs|reserved    |twvo|thvo|
+------------+--+--+--------...-+----+----+

size:box长度
type:文件类型标识内容为"tkhd"
vsfl:版本号标志
cttm:creat time 文件创建时间
mdtm:modification time  文件修改时间
tkid:track-id 同一个文件中这是一个不重复的序列
resv:reserved 保留字段
duat:duration 总的播放时间长度
reserved: 保留字段
ct:codec_type {audio=0x0100; video=0} 编码类型,到底是音频还是视频等
rs:reserved 保留字段
reserved: 保留字段
如果这个track 是视频编码它将有如下字段,在你解码的时候非常有用.
twvo:Track width , for visual only 视频的宽度
thvo:Track height, for visual only 视频的高度

MDIA是存放具体的媒体信息的容器。
有且仅有3个子box:{MDHD,HDLR,MINF}

MDHD媒体头,也有两个版本
 v=0
+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+
|size|type|cttm|mdtm|tmsk|duat|
+----+----+----+----+----+----+

v=1
+[4]-+[4]-+[8]-----+[8]-----+[4]-+[8]-----+
|size|type|cttm    |mdtm    |tmsk|duat    |
+----+----+--------+--------+----+--------+
其中
size:box长度
type:文件类型标识内容为"mdhd"

pl:pad&language{bit(1) pad = 0;unsigned int(5)[3] language // ISO-639-2/T language code参见附录}
*-*[15]-----------*
|p|language       |
*-*---------------*

pd:unsigned int(16) pre_defined = 0;

HDLR 句柄,描述媒体类型
+[4]-+[4]-+[4]-+[12]--------+[size-24]--+
|size|pred|hdlt|reserved    |name       |
+----+----+----+------------+-----------+
size:box长度
type:文件类型标识内容为"tkhd"

pred:pre_defined = 0;
hdlt:handler_type;
 ‘vide’ Video track 视频
 ‘soun’ Audio track 音频
 ‘hint’ Hint track 注释
reserved: reserved = 0;
name: 名称字符串,0结尾的UTF-8串

MINF 媒体信息容器(Media Information Box)
这是一个普通的box容器.它的内部可能包含如下的子box:
VMHD,SMHD,HMHD,NMHD,DINF,STBL.
VMHD,SMHD,HMHD分别对应于视频,音频,注视,NMHD我还不太清楚.它们都属于fullbox.
DINF数据信息和STBL采样表,都是普通的box. VMHD还包括两个数据字段.
+[4]-+[4]-+[4]-+[4]-+
|gmod|opcl          |
+----+----+----+----+
 
gmod:graphicsmode 描述了本视频track 与其他视频track的混合方式.默认的值为0,也就是直接覆盖.
opcl:opcolor 透明色颜色值 (red, green, blue)如果gmod不是copy的话会用到.
SMHD包括两个字段
+--+--+
|bl|rs|
+--+--+
 
bl:balance 是一个定点小数(精度 8.8) 前8bits是整数,后8bits是小数.如果值为0说明左右声道是相同的.全左的情况下值为-1.0 全右则为1.0.
rs:reserved 保留字段.
HMHD包括5个字段.如下:
+--+--+[4]-+[4]-+[4]-+
|mp|ap|mbrt|abrt|resv|
+--+--+----+----+----+
 
mp:maxPDUsize 最大PDU长度 -pdu是啥???????? 知道啥是pdu的朋友请告诉我.
ap:avgPDUsize 平均PDU长度
mbrt:maxbitrate 最大比特率
abrt:avgbitrate 平均比特率
resv:reserved 保留字段

NMHD是个空的fullbox

DINF是一个普通的box,也是一个容器,它包括url,urn,dref三个fullbox
url 内部是一个UTF-8编码的0结尾的字符串
string location;
url里面则是两个
string name;
string location;
这两个都被称为DataEntryBox.
dref里面是一个url或者urn的列表.首先它有一个字段
unsigned int(32) entry_count;DataEntryBox的列表的个数.
然后就是DataEntryBox的列表

STBL是一个普通的box,也是一个容器,里面包含了很多媒体采样信息.

STTS是一个fullbox里面包含了采样的时间长度信息
内部的数据首先是列表长度
unsigned int(32) entry_count;
然后就是采用时长列表.
列表每一项都由两个字段组成.
unsigned int(32) sample_count;采样个数
unsigned int(32) sample_delta;每个采样的时间长度.

在认识stsd之前我们首先要了解一个数据结构SampleEntry和它的子类AudioSampleEntry,VisualSampleEntry和HintSampleEntry

sample_e

SampleEntry 是一个继成box的抽象的数据结构模型.
除了size,type外它包括两个字段,如下:
+[4]-+[4]-+[6]---+--+
|size|type|resved|di|
+----+----+------+--+
resved:reserved,保留字段
di:data_reference_index,序号.
从这个抽象数据结构继承下来的三个子类分别增加了几个独特的新字段.

HintSampleEntry
+[4]-+[4]-+[6]---+--+[n]-+
|size|type|resved|di|data|
+----+----+------+--+----+
resved:reserved,保留字段
di:data_reference_index,序号.
data:是一个0结尾的utf8编码的字符串.

VisualSampleEntry
+[4]-+[4]-+[6]---+--+--+--+[12]---------+--+--+[4]-+[4]-+[4]-+--+[32]----...---+--+--+
|size|type|resved|di|pd|rs|pre_defined |wd|ht|hrsl|vrsl|resv|fc|compressorname|dp|pd|
+----+----+------+--+--+--+-------------+--+--+----+----+----+--+--------...---+--+--+
size:box长度
type:box:类型
resved:reserved,保留字段
di:data_reference_index,序号.
pd: pre_defined 保留字段
rs: reserved 保留字段
pd: pre_defined 保留字段
wd: width 视频的宽
ht: height 视频的高
hrsl: horizresolution 水平分辨率如0x00480000; // 72 dpi
vtsl: vertresolution 垂直分辨率如0x00480000; // 72 dpi
rd: reserved 保留字段
fc: frame_count 每个采样里面的贞数,一般是1;
cmpn: compressorname 是一个数字开头的字符串.并且末尾有填料.对齐到32位.
  +-+[n]-+[x]-+
  |n|data|xpad|
  +-+----+----+
n:number of data.数据的长度,x+n+1=32
dp: depth 视频的色深 0x18 表示24位色
pd: pre_defined 保留字段

AudioSampleEntry
+[4]-+[4]-+[6]---+--+[8]-----+--+--+--+--+[4]-+
|size|type|resved|di|reserved|cc|ss|pd|rs|sprt|
+----+----+------+--+--------+--+--+--+--+----+

resved:reserved,保留字段
di:data_reference_index,序号.
reserved:保留字段
cc: channelcount 声道数1或者2;
ss: samplesize 采样位数大小 8bit 8 ;16bit 16;
pd: pre_defined 保留字段
rs: reserved保留字段
sprt:samplerate 采样率

stsd是一个采样包(SampleEntry)的列表,一般来讲同一个列表中只有一种SampleEntry.
可以通过hdlr里面的handler_type来判断属于哪种SampleEntry.
内部的数据首先是列表长度,一个32位无符号整数 entry_count;
然后就是采样包列表.
采样包有很多具体的实现.如下:
+MP4VisualSampleEntry:MP4视频采样包.
+MP4AudioSampleEntry:Entry type for audio samples defined in the MP4 specification.
+AMRSampleEntry:Entry type for AMR and AMR-WB speech samples defined in clause 6.5 of the present document.
+AMRWPSampleEntry:Entry type for AMR and AMR-WB speech samples defined in clause 6.5 of the present document.
+H263SampleEntry:Entry type for H.263 visual samples defined in clause 6.6 of the present document.
+BitrateBox:比特率信息包(可选的)
+AVCSampleEntry:Entry type for H.264 (AVC) visual samples defined in the AVC file format specification.
+TextSampleEntry:Entry type for timed text samples defined in the timed text specification
+HintSampleEntry:Entry type for hint track samples defined in the ISO specification.

本文章最初发表于csdn:http://blog.csdn.net/windcao/archive/2006/05/12/725722.aspx

最后更新日期2007-3-23 11:13

附录:
ISO-639-2/T language code

    
ISO 639-2 CodeISO 639-1 CodeEnglish name of Language
aar aa Afar
abk ab Abkhazian
ace   Achinese
ach   Acoli
ada   Adangme
ady   Adyghe; Adygei
afa   Afro-Asiatic (Other)
afh   Afrihili
afr af Afrikaans
ain   Ainu
aka ak Akan
akk   Akkadian
alb/sqi sq Albanian
ale   Aleut
alg   Algonquian languages
alt   Southern Altai
amh am Amharic
ang   English, Old (ca.450-1100)
anp   Angika
apa   Apache languages
ara ar Arabic
arc   Aramaic
arg an Aragonese
arm/hye hy Armenian
arn   Araucanian
arp   Arapaho
art   Artificial (Other)
arw   Arawak
asm as Assamese
ast   Asturian; Bable
ath   Athapascan languages
aus   Australian languages
ava av Avaric
ave ae Avestan
awa   Awadhi
aym ay Aymara
aze az Azerbaijani
bad   Banda
bai   Bamileke languages
bak ba Bashkir
bal   Baluchi
bam bm Bambara
ban   Balinese
baq/eus eu Basque
bas   Basa
bat   Baltic (Other)
bej   Beja
bel be Belarusian
bem   Bemba
ben bn Bengali
ber   Berber (Other)
bho   Bhojpuri
bih bh
bik   Bikol
bin   Bini
bis bi Bislama
bla   Siksika
bnt   Bantu (Other)
tib/bod bo Tibetan
bos bs Bosnian
bra   Braj
bre br Breton
btk   Batak (Indonesia)
bua   Buriat
bug   Buginese
bul bg Bulgarian
bur/mya my Burmese
byn   Blin; Bilin
cad   Caddo
cai   Central American Indian (Other)
car   Carib
cat ca Catalan; Valencian
cau   Caucasian (Other)
ceb   Cebuano
cel   Celtic (Other)
cze/ces cs Czech
cha ch Chamorro
chb   Chibcha
che ce Chechen
chg   Chagatai
chi/zho zh Chinese
chk   Chuukese
chm   Mari
chn   Chinook jargon
cho   Choctaw
chp   Chipewyan
chr   Cherokee
chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
chv cv Chuvash
chy   Cheyenne
cmc   Chamic languages
cop   Coptic
cor kw Cornish
cos co Corsican
cpe   Creoles and pidgins, English based (Other)
cpf   Creoles and pidgins, French-based (Other)
cpp   Creoles and pidgins, Portuguese-based (Other)
cre cr Cree
crh   Crimean Tatar; Crimean Turkish
crp   Creoles and pidgins (Other)
csb   Kashubian
cus   Cushitic (Other)
wel/cym cy Welsh
cze/ces cs Czech
dak   Dakota
dan da Danish
dar   Dargwa
day   Dayak
del   Delaware
den   Slave (Athapascan)
ger/deu de German
dgr   Dogrib
din   Dinka
div dv Divehi; Dhivehi; Maldivian
doi   Dogri
dra   Dravidian (Other)
dsb   Lower Sorbian
dua   Duala
dum   Dutch, Middle (ca.1050-1350)
dut/nld nl Dutch; Flemish
dyu   Dyula
dzo dz Dzongkha
efi   Efik
egy   Egyptian (Ancient)
eka   Ekajuk
gre/ell el Greek, Modern (1453-)
elx   Elamite
eng en English
enm   English, Middle (1100-1500)
epo eo Esperanto
est et Estonian
baq/eus eu Basque
ewe ee Ewe
ewo   Ewondo
fan   Fang
fao fo Faroese
per/fas fa ersian
fat  
fij fj Fijian
fil   Filipino; Pilipino
fin fi Finnish
fiu   Finno-Ugrian (Other)
fon   Fon
fre/fra fr French
fre/fra fr French
frm   French, Middle (ca.1400-1600)
fro   French, Old (842-ca.1400)
frr   Northern Frisian
frs   Eastern Frisian
fry fy Western Frisian
ful ff Fulah
fur   Friulian
gaa   Ga
gay   Gayo
gba   Gbaya
gem   Germanic (Other)
geo/kat ka Georgian
ger/deu de German
gez   Geez
gil   Gilbertese
gla gd Gaelic; Scottish Gaelic
gle ga Irish
glg gl Galician
glv gv Manx
gmh   German, Middle High (ca.1050-1500)
goh   German, Old High (ca.750-1050)
gon   Gondi
gor   Gorontalo
got   Gothic
grb   Grebo
grc   Greek, Ancient (to 1453)
gre/ell el Greek, Modern (1453-)
grn gn Guarani
gsw   Alemani; Swiss German
guj gu Gujarati
gwi   Gwich磇n
hai   Haida
hat ht Haitian; Haitian Creole
hau ha Hausa
haw   Hawaiian
heb he Hebrew
her hz Herero
hil   Hiligaynon
him   Himachali
hin hi Hindi
hit   Hittite
hmn   Hmong
hmo ho Hiri Motu
scr/hrv hr Croatian
hsb   Upper Sorbian
hun hu Hungarian
hup   Hupa
arm/hye hy Armenian
iba   Iban
ibo ig Igbo
ice/isl is Icelandic
ido io Ido
iii ii Sichuan Yi
ijo   Ijo
iku iu Inuktitut
ile ie Interlingue
ilo   Iloko
ina ia Interlingua (International Auxiliary Language Association)
inc   Indic (Other)
ind id Indonesian
ine   Indo-European (Other)
inh   Ingush
ipk ik Inupiaq
ira   Iranian (Other)
iro  
ice/isl is Icelandic
ita it Italian
jav jv Javanese
jbo   Lojban
jpn ja Japanese
jpr   Judeo-Persian
jrb   Judeo-Arabic
kaa   Kara-Kalpak
kab   Kabyle
kac   Kachin
kal kl Kalaallisut; Greenlandic
kam   Kamba
kan kn Kannada
kar   Karen
kas ks Kashmiri
geo/kat ka Georgian
kau kr Kanuri
kaw   Kawi
kaz kk Kazakh
kbd   Kabardian
kha   Khasi
khi   Khoisan (Other)
khm km Khmer
kho   Khotanese
kik ki Kikuyu; Gikuyu
kin rw Kinyarwanda
kir ky Kirghiz
kmb   Kimbundu
kok   Konkani
kom kv Komi
kon kg Kongo
kor ko Korean
kos   Kosraean
kpe   Kpelle
krc   Karachay-Balkar
krl   Karelian
kro   Kru
kru   Kurukh
kua kj Kuanyama; Kwanyama
kum   Kumyk
kur ku Kurdish
kut   Kutenai
lad   Ladino
lah   Lahnda
lam   Lamba
lao lo Lao
lat la Latin
lav lv Latvian
lez   Lezghian
lim li Limburgan; Limburger; Limburgish
lin ln Lingala
lit lt Lithuanian
lol   Mongo
loz   Lozi
ltz lb Luxembourgish; Letzeburgesch
lua   Luba-Lulua
lub lu Luba-Katanga
lug lg Ganda
lui   Luiseno
lun   Lunda
luo   Luo (Kenya and Tanzania)
lus   Lushai
mac/mkd mk Macedonian
mad   Madurese
mag   Magahi
mah mh Marshallese
mai   Maithili
mak   Makasar
mal ml Malayalam
man   Mandingo
mao/mri mi Maori
map   Austronesian (Other)
mar mr Marathi
mas   Masai
may/msa ms Malay
mdf   Moksha
mdr   Mandar
men   Mende
mga   Irish, Middle (900-1200)
mic   Mi'kmaq; Micmac
min   Minangkabau
mis   Miscellaneous languages
mac/mkd mk Macedonian
mkh   Mon-Khmer (Other)
mlg mg Malagasy
mlt mt Maltese
mnc   Manchu
mni   Manipuri
mno   Manobo languages
moh   Mohawk
mol mo Moldavian
mon mn Mongolian
mos   Mossi
mao/mri mi Maori
may/msa ms Malay
mul   Multiple languages
mun   Munda languages
mus   Creek
mwl   Mirandese
mwr   Marwari
bur/mya my Burmese
myn   Mayan languages
myv   Erzya
nah   Nahuatl
nai   North American Indian
nap   Neapolitan
nau na Nauru
nav nv Navajo; Navaho
nbl nr Ndebele, South; South Ndebele
nde nd Ndebele, North; North Ndebele
ndo ng Ndonga
nds   Low German; Low Saxon; German, Low; Saxon, Low
nep ne Nepali
new   Nepal Bhasa; Newari
nia   Nias
nic   Niger-Kordofanian (Other)
niu   Niuean
dut/nld nl Dutch; Flemish
nno nn Norwegian Nynorsk; Nynorsk, Norwegian
nob nb Bokm錶, Norwegian; Norwegian Bokm錶
nog   Nogai
non   Norse, Old
nor no Norwegian
nqo   N'Ko
nso   Pedi; Sepedi; Northern Sotho
nub   Nubian languages
nwc   Classical Newari; Old Newari; Classical Nepal Bhasa
nya ny Chichewa; Chewa; Nyanja
nym   Nyamwezi
nyn   Nyankole
nyo   Nyoro
nzi   Nzima
oci oc
oji oj Ojibwa
ori or Oriya
orm om Oromo
osa   Osage
oss os Ossetian; Ossetic
ota   Turkish, Ottoman (1500-1928)
oto   Otomian languages
paa   Papuan (Other)
pag   Pangasinan
pal   Pahlavi
pam   Pampanga
pan pa Panjabi; Punjabi
pap   Papiamento
pau   Palauan
peo   Persian, Old (ca.600-400 B.C.)
per/fas fa Persian
phi   Philippine (Other)
phn   Phoenician
pli pi Pali
pol pl Polish
pon   Pohnpeian
por pt Portuguese
pra   Prakrit languages
pro   Provenl, Old (to 1500)
pus ps Pushto
qaa-qtz   Reserved for local use
que qu Quechua
raj   Rajasthani
rap   Rapanui
rar   Rarotongan
roa   Romance (Other)
roh rm Raeto-Romance
rom   Romany
rum/ron ro Romanian
rum/ron ro Romanian
run rn Rundi
rup   Aromanian; Arumanian; Macedo-Romanian
rus ru Russian
sad   Sandawe
sag sg Sango
sah   Yakut
sai   South American Indian (Other)
sal   Salishan languages
sam   Samaritan Aramaic
san sa Sanskrit
sas   Sasak
sat   Santali
scc/srp sr Serbian
scn   Sicilian
sco   Scots
scr/hrv hr Croatian
sel   Selkup
sem   Semitic (Other)
sga   Irish, Old (to 900)
sgn   Sign Languages
shn   Shan
sid   Sidamo
sin si Sinhala; Sinhalese
sio   Siouan languages
sit   Sino-Tibetan (Other)
sla   Slavic (Other)
slo/slk sk Slovak
slo/slk sk Slovak
slv sl Slovenian
sma   Southern Sami
sme se Northern Sami
smi   Sami languages (Other)
smj   Lule Sami
smn   Inari Sami
smo sm Samoan
sms   Skolt Sami
sna sn Shona
snd sd Sindhi
snk   Soninke
sog   Sogdian
som so Somali
son   Songhai
sot st Sotho, Southern
spa es Spanish; Castilian
alb/sqi sq
srd sc Sardinian
srn   Sranan Togo
scc/srp sr Serbian
srr   Serer
ssa   Nilo-Saharan (Other)
ssw ss Swati
suk   Sukuma
sun su Sundanese
sus   Susu
sux   Sumerian
swa sw Swahili
swe sv Swedish
syr   Syriac
tah ty Tahitian
tai   Tai (Other)
tam ta Tamil
tat tt Tatar
tel te Telugu
tem   Timne
ter   Tereno
tet   Tetum
tgk tg Tajik
tgl tl Tagalog
tha th Thai
tib/bod bo Tibetan
tig   Tigre
tir ti Tigrinya
tiv   Tiv
tkl   Tokelau
tlh   Klingon; tlhIngan-Hol
tli   Tlingit
tmh   Tamashek
tog   Tonga (Nyasa)
ton to Tonga (Tonga Islands)
tpi   Tok Pisin
tsi   Tsimshian
tsn tn Tswana
tso ts Tsonga
tuk tk Turkmen
tum   Tumbuka
tup   Tupi languages
tur tr Turkish
tut   Altaic (Other)
tvl   Tuvalu
twi tw Twi
tyv  
udm   Udmurt
uga   Ugaritic
uig ug Uighur; Uyghur
ukr uk Ukrainian
umb   Umbundu
und   Undetermined
urd ur Urdu
uzb uz Uzbek
vai   Vai
ven ve Venda
vie vi Vietnamese
vol vo Volap黭
vot   Votic
wak   Wakashan languages
wal   Walamo
war   Waray
was   Washo
wel/cym cy Welsh
wen   Sorbian languages
wln wa Walloon
wol wo Wolof
xal   Kalmyk; Oirat
xho xh Xhosa
yao   Yao
yap   Yapese
yid yi Yiddish
yor yo Yoruba
ypk   Yupik languages
zap   Zapotec
zen   Zenaga
zha za Zhuang; Chuang
chi/zho zh Chinese
znd   Zande
zul zu Zulu
zun   Zuni
zxx   No linguistic content
zza   Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki



Comments on this document: iso639-2@loc.gov




IS0 639-2 HOME - Code
List
- Changes to Codes

ISO
639 Joint Advisory Committee
-
ISO
639-1 Registration Authority






Library of Congress >> Standards

Contact Us
October 5, 2006