2019-03-14 15:37:31 hr963171814 阅读数 48

如何评判一个编解码框架的优劣:

1.是否支持跨语言
2.编码后的码流大小
3.编解码的性能
4.类库是否小巧,api使用方便度
5.使用者开发工作量和难度

java序列化的目的

1.网络传输
2.对象持久化

java序列化的缺点

1.无法跨语言,序列化和反序列化只能java实现
2.序列化后的码流过大
3.序列化性能太低

业界主流的编解码框架

1.Google的protobuf

2.Facebook的Thrift

3.Jboss的Marshalling

2018-03-03 17:56:21 test1280 阅读数 281

编解码:Base64编解码

编解码:十六进制编解码中提到,编解码本质上是以不同的数据形式来展示“信息”,可以用二进制来表示,可以用十六进制来表示。

二进制的数据,在计算机中通常是不可读不可打印的。

那有没有一种方式,可以让二进制的数据变成“可读可打印”的?

方法有很多,最常见的是十六进制编解码和Base64编解码。

十六进制编解码之前已介绍过,本文介绍Base64编解码。

百度百科:Base64是一种基于64个可打印字符来表示二进制数据的方法。

Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’(只可能出现0/1/2个等号,否则就是错误的)。

为啥只可能出现0/1/2个等号?动手算算就知道。

将所有的bit位用8n表示(n表示待编码数据字节数量),则当:

n=1时,8*1 mod 6 = 2bit,需要补2个等号
n=2时,8*2 mod 6 = 4bit,需要补1个等号
n=3时,8*3 mod 6 = 0bit,需要补0个等号
n=4时,8*4 mod 6 = 2bit,需要补2个等号
……

Base64编解码前后空间大小变化:

6字节的数据,在编码后占用8字节空间;空间多占用了2B,比原来大:2B/6B=1/3
8字节的数据,在解码后占用6字节空间;空间少占用了2B,比原来小:2B/8B=1/4

Base64编码使得待编码数据增大,增加到原大小的4/3;
Base64解码使得戴洁马数据减小,减小到原大小的3/4;

Demo:

待转换数据(3字节24bit):0x61(a), 0x62(b), 0x63(c):
二进制形式:01100001 01100010 01100011
分组(每6bit一组*4组):011000 010110 001001 100011
每组高位补两个bit的0:00011000 00010110 00001001 00100011
十进制:24 22 9 35

参照对照表(摘自:http://base64.xpcha.com/):

http://base64.xpcha.com/

Base64结果:YWJj

待转换数据(1字节8bit):0x61(a)
二进制形式:01100001
不是6bit整数,需要多补4个bit 0,结果为:01100001 0000
分组:011000 010000
高位补两个bit的0:00011000 00010000
十进制:24 16
转换结果:Y Q
由于Base64规定,Base64结果长度一定是4的倍数,如果不够则以’=’补全,则实际Base64结果为:
YQ==

Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

static const unsigned char *base64=(unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

/*-----------------------------------------------------------------------------
 * 函数名称:Base64Encode
 * 功能描述:Base64编码
 * 参数说明:base64code:编码结果缓冲区;src:待编码数据;src_len待编码数据长度
 * 返 回 值:编码结果长度(字节)
 * 备    注:注意留有足够的结果缓冲区(src_len/3*4)
 * */
static int Base64Encode(char *base64code, const char *src, int src_len)
{
    int n,buflen,i,j;

    if (src_len == 0)
        src_len = strlen(src);

    buflen=n=src_len;

    for (i=0,j=0; i<=buflen-3; i+=3,j+=4)
    {
        base64code[j] = (src[i]&0xFC)>>2;
        base64code[j+1] = ((src[i]&0x03)<<4) + ((src[i+1]&0xF0)>>4);
        base64code[j+2] = ((src[i+1]&0x0F)<<2) + ((src[i+2]&0xC0)>>6);
        base64code[j+3] = src[i+2]&0x3F;
    }

    if (n%3==1)
    {
        base64code[j] = (src[i]&0xFC)>>2;
        base64code[j+1] = ((src[i]&0x03)<<4);
        base64code[j+2] = 64;
        base64code[j+3] = 64;
        j += 4;
    }
    else if (n%3==2)
    {
        base64code[j] = (src[i]&0xFC)>>2;
        base64code[j+1] = ((src[i]&0x03)<<4) + ((src[i+1]&0xF0)>>4);
        base64code[j+2] = ((src[i+1]&0x0F)<<2);
        base64code[j+3] = 64;
        j += 4;
    }

    for (i=0; i<j; i++)
        base64code[i] = base64[(int)base64code[i]];

    base64code[j] = 0;

    return j;
}

/*-------------------------------------------------------------------------------
 * 函数名称:Base64Decode
 * 功能描述:Base64解码
 * 参数说明:buf:解码结果缓冲区;base64code:待解码数据;src_len:待解码数据长度
 * 返 回 值:解码结果长度(字节)
 * 备    注:注意,buf中解码结果缓冲区中数据不一定可打印
 * */
static int Base64Decode(char *buf, const char *base64code, int src_len)
{
    int n,i,j,pad;

    if (src_len == 0)
        src_len = strlen(base64code);

    if (src_len%4 != 0)
        return -1;

    unsigned char *p=0;
    unsigned char *src=0;

    pad = 0;
    n = src_len;
    src = (unsigned char *)malloc(n);

    for (i=0; i<n; i++)
        src[i]=base64code[i];

    while (n>0&&src[n-1]=='=')
    {
        src[n-1] = 0;
        pad++;
        n--;
    }

    for(i=0; i<n; i++)
    {
        p = (unsigned char *)strchr((const char *)base64, (int)src[i]);
        if (!p)
        {
            free(src);
            return -1;
        }

        src[i] = p-(unsigned char *)base64;
    }

    for (i=0,j=0; i<n; i+=4,j+=3)
    {
        buf[j] = (src[i]<<2) + ((src[i+1]&0x30)>>4);
        buf[j+1] = ((src[i+1]&0x0F)<<4) + ((src[i+2]&0x3C)>>2);
        buf[j+2] = ((src[i+2]&0x03)<<6) + src[i+3];
    }

    j -= pad;
    buf[j] = 0;
    free(src);

    return j;
}

int main()
{
    // 测试Base64编码
    {
        char buff[1024] = "";
        char *str = "0123456789abcdef";

        memset(buff, 0, 1024); // clear
        int base64len = Base64Encode(buff, str, strlen(str));
        buff[base64len] = 0;

        printf("%s\n", buff);
    }

    // 测试Base64解码
    {
        char buff[1024] = "";
        char *str = "MDEyMzQ1Njc4OWFiY2RlZg==";

        memset(buff, 0, 1024);
        int base64len = Base64Decode(buff, str, strlen(str));

        printf("%s\n", buff);
    }

    return 0;
}

编译 && 执行:

[jiang@localhost jiang]$ gcc -o Base64 Base64.c 
[jiang@localhost jiang]$ ./Base64 
MDEyMzQ1Njc4OWFiY2RlZg==
0123456789abcdef

需要注意:

为啥在编码时需要指明待编码数据长度?

原因是待编码数据不一定可读,是二进制数据,即,可能存在0x00,很显然不可以用strlen,那我在编码函数中如何知道其待编码数据长度呢?不知道!所以,调用编码函数时需要显示地指明待编码数据长度。

引用:

1.http://base64.xpcha.com/

2017-03-03 16:52:42 NB_vol_1 阅读数 2778

硬件编解码介绍



音视频编解码的两种方式


    对视频数据编解码一般有两种方式:

    1、软件的方式。使用常规的x264、x265等软件编解码器对数据进行处理,优点是灵活,可以根据需要进行定制,缺点是速度比较慢
    2、硬件的方式。使用硬件芯片厂商提供的API进行编解码,这些编解码器已经被集成到了硬件底层,优点是速度快,缺点是与平台相关,而且不够灵活。



常见的硬件编码


    常见的硬件编解码方式有:
    1、Android平台提供的MediaCodec 
    2、iOS平台提供的Video ToolBox
    3、Intel提供的QuickSync 
2018-03-03 16:13:29 test1280 阅读数 1523

编解码:十六进制编解码

信息有多种表现形式:二进制、十进制、十六进制、字符串…

在计算机中,信息是以二进制的形式来表现。

可以人为定义:0就是假,1就是真,等等。

所谓编解码,是将一种数据以另一种形式来表现,若正向变换称为编码,则其逆向过程则为解码。

计算机中,数据的本质是一串二进制0和1的字符串。

例如,二进制字符串0a代表十进制字符串10,十进制字符串255以二进制的形式表现则为0xff。

我们定义:

由二进制编码为十六进制的过程,称为十六进制码;
由十六进制编码为二进制的过程,称为十六进制码;

规则如下:

二进制数据:0x0a,在计算机中通常占1字节存储空间,即8bit,我们将前4bit取出,以十六进制表示,为字符串第一个字符:’0’;我们将后4bit取出,以十六进制表示,为字符串第二个字符:’a’,即,0000–>‘0’,1010–>’a’,最终结果为字符串”0a”。

若存在多个字节数据,则从左到右,依次编码。

例如:

0xab 0xcd 0xef 编码为十六进制:”abcdef”。

可见,编解码的本质是将数据以另一种不同形式表示的过程,数据信息本身并不发生改变。

如何将上面的解释“以程序代码的形式”进行“编码”?(^_^)


以上的文字包含了我此篇文章的信息,是以中英文形式表示,下面的代码,是将此篇文章的信息,以C程序的形式表示,这也是一种编解码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

/*--------------------------------------------------------------
 * 函数名称:bin2hex
 * 功能描述:对Binary数据以十六进制形式进行编码
 * 参数说明:bin:待编码数据;blen:待编码数据长度
 * 返 回 值:
 * 备    注:一字节数据0xab编码为字符串"ab"
 * */
void bin2hex(const unsigned char *bin, size_t blen)
{
    static char bin2char[] = "0123456789abcdef";
    char *hex = malloc(blen*2+1); // The Last '1' For C 'NULL'
    memset(hex, 0, blen*2+1);
    for (size_t i = 0; i < blen; i++)
    {
        hex[i*2] = bin2char[bin[i]>>4];
        hex[i*2+1] = bin2char[bin[i]&0x0f];
    }
    printf("%s\n", hex);
    free(hex);
}

/*--------------------------------------------------------------
 * 函数名称:hex2num
 * 功能描述:十六进制字符转换为十进制数字
 * 参数说明:ch:待转换十六进制字符
 * 返 回 值:转换后的十进制数字
 * 备    注:忽略错误
 * */
unsigned int hex2num(char ch)
{
    if (ch >= '0' && ch <= '9')
        return ch - '0';
    else if (ch >= 'a' && ch <= 'z')
        return ch - 'a';
    else if (ch >= 'A' && ch <= 'Z')
        return ch - 'A';
    else
        return 0; // error
}

/*--------------------------------------------------------------
 * 函数名称:hex2bin
 * 功能描述:十六进制形式解码为Binary数据
 * 参数说明:hex:待解码十六进制数据
 * 返 回 值:Binary数据
 * 备    注:可由Hex数据推导出Bin数据长度(Hex-Len = 2 * Bin-Len)
 * */
unsigned char *hex2bin(const char *hex)
{
    size_t blen = strlen(hex) / 2;
    unsigned char *bin = malloc(blen);
    for (size_t i = 0; i < blen; i++)
        bin[i] = hex2num(hex[i*2])*16 + hex2num(hex[i*2+1]);
    return bin;
}

int main()
{
    const char *hex = "0123456789abcdef";
    unsigned char *bin = hex2bin(hex);
    bin2hex(bin, 8);
    free(bin);
    return 0;
}

编译 && 执行:

[jiang@localhost jiang]$ gcc -o HexWithBin HexWithBin.c -std=c99
[jiang@localhost jiang]$ ./HexWithBin 
0123456789012345

请注意:

编解码的结果仅仅是数据表现形式不同,但结果所蕴含的信息数据是完全相同的。
编解码不等于加解密,更不等于摘要,他们三者是完全独立的概念,之间相互无任何关联性。
2019-05-02 20:13:44 fengbingchun 阅读数 848

AVS(Audio Video coding Standard)即数字音视频编解码技术标准,为中国第二代信源编码标准,此编码技术主要解决数字音视频海量数据(即初始数据、信源)的编码压缩问题,故也称数字音视频编解码技术。

AVS工作组即数字音视频编解码技术标准工作组(Audio Video coding Standard Workgroup of China)由国家原信息产业部科学技术司于2002年6月批准成立。工作组的任务是:面向我国的信息产业需求,联合国内企业和科研机构,制(修)订数字音视频的压缩、解压缩、处理和表示等共性技术标准,为数字音视频设备与系统提供高效经济的编解码技术,服务于高分辨率数字广播、高密度激光数字存储媒体、无线宽带多媒体通讯、互联网宽带流媒体等重大信息产业应用。自AVS工作组2002年成立以来,至今,已制定了两代AVS标准。

AVS标准工作简况与进展:AVS是我国具备自主知识产权的第二代信源编码标准。顾名思义,”信源”是信息的”源头”,信源编码技术解决的重点问题是数字音视频海量数据(即初始数据、信源)的编码压缩问题,故也称数字音视频编解码技术。显而易见,它是其后数字信息传输、存储、播放等环节的前提,因此是数字音视频产业的共性基础标准。

国际上音视频编解码标准主要两大系列:ISO/IEC JTC1制定的MPEG系列标准;ITU针对多媒体通信制定的H.26x系列视频编码标准和G.7系列音频编码标准。1994年由MPEG和ITU合作制定的MPEG-2是第一代音视频编解码标准的代表,也是目前国际上最为通行的音视频标准。

经过十年多演变,音视频编码技术本身和产业应用背景都发生了明显变化,后起之秀辈出。目前音视频产业可以选择的信源编码标准有五个:MPEG-2、MPEG-4、MPEG-4 AVC(简称AVC,也称JVT、H.264)、HEVC、AVS。从制订者分,前四个标准是由MPEG专家组完成的,第五个是我国自主制定的。从发展阶段分,MPEG-2是第一代信源标准,其余四个为第二代标准。从主要技术指标----编码效率比较:MPEG-4是MPEG-2的1.4倍,第一代AVS和AVC相当,都是MPEG-2两倍以上。第二代AVS2编码效率比第一代标准提高了一倍以上,压缩效率超越最新国际标准HEVC(H.265)。

可以推测,由于技术陈旧需要更新及收费较高等原因,MPEG-2即将退出历史舞台。MPEG-4出台的新专利许可政策被认为过于苛刻令人无法接受,导致被众多运营商围攻,陷入无法推广产业化的泥沼而无力自拔,前途未卜。而AVS是基于我国创新技术和部分公开技术的自主标准,第一代AVS编码效率比MPEG-2高2-3倍,与AVC相当,技术方案简洁,芯片实现复杂度低,达到了第二代标准的最高水平;而且,AVS通过简洁的一站式许可政策,解决了AVC专利许可问题死结,是开放式制订的国家、国际标准,易于推广;第二代AVS2编码效率比第一代标准提高了一倍以上,压缩效率超越最新国际标准HEVC(H.265)。此外,AVC仅是一个视频编码标准,而AVS是一套包含系统、视频、音频、数字版权管理在内的完整标准体系,为数字音视频产业提供更全面的解决方案。综上所述,AVS可称第二代信源标准的上选。

第一代AVS标准制订起始于2002年,指系列国家标准《信息技术 先进音视频编码》(简称AVS1,国家标准代号GB/T 20090)和广电系列标准《广播电视先进音视频编解码》(简称AVS+)。AVS1包括系统、视频、音频、数字版权管理等四个主要技术标准和符合性测试等支撑标准,目前共14个部分。GB/T 20090视频标准于2006年2月颁布,目前GB/T 20090系列国家标准已颁布9项。针对广电应用制订的行业标准《广播电视先进音视频编解码 第1部分:视频》于2012年7月获批为行业标准,行标号为GY/T 257.1----2012,简称AVS+。

第二代AVS标准包括系列国家标准《信息技术 高效多媒体编码》(简称AVS2),AVS2主要面向超高清电视节目的传输,定位在引领未来五到十年数字媒体产业的发展,并争取为相关国际标准的制定发挥关键作用。在第一代AVS推广应用的同时,AVS技术的持续演进工作在积极推进,第二代标准AVS2技术已开发完成,2016年5月,广电总局颁布AVS2视频为行业标准,2016年12月30日,颁布为国家标准。

经国家新闻出版广电总局、工业和信息化部测试机构测试,第一代AVS的压缩效率与同期国际标准MPEG-4 AVC/H.264相当,比原视频编码国家标准GB/T 17975.2-2000(等同采用ISO/IEC 13818.2-1994,即MPEG-2)提高一倍以上。因而能够成倍节省频谱和带宽,经济效益突出。根据国家新闻出版广电总局广播电视规划院进行的严格测试,第二代AVS2编码效率比第一代标准提高了一倍以上,压缩效率超越最新国际标准HEVC(H.265),相对于第一代AVS标准,第二代AVS标准可节省一半的传输带宽,将支撑未来几年超高清电视在我国的推广应用。

目前,AVS标准除在广电领域广泛使用,已进入互联网领域,下一步AVS2会进入监控应用。

2016年初,AVS已启动VR国际标准和国家标准的制定,AVS VR国际标准已完成立项。2017年1月开始,AVS工作组已启动《信息技术 虚拟现实内容高效编码》(简称AVS VR标准)系列标准的国家立项申请工作。

2018年初,第二代AVS系统部分《信息技术 高效多媒体编码 第1部分:系统》和音频部分《信息技术 高效多媒体编码 第3部分:音频》进入国标委审批,等待颁布。

2018年6月7日,我国第二代数字音频编码标准《信息技术 高效多媒体编码 第3部分:音频》(简称AVS2音频标准)由国家市场监督管理总局和国家标准化管理委员会颁布为国家标准,标准代号GB/T 33475.3-2018,将于2019年1月1日正式实施。AVS2音频标准立足提供完整的高清三维视听技术方案,与第二代AVS视频编码(AVS2视频)配套,是更适合超高清、3D等新一代视听系统需要的高质量、高效率音频编解码标准。将应用于全景声电影、超高清电视、互联网宽带音视频业务、数字音视频广播无线宽带多媒体通信、虚拟现实和增强现实及视频监控等领域。

AVS产业化的主要产品形态包括

(1). 芯片:高清晰度/标准清晰度AVS解码芯片和编码芯片。

(2). 软件:AVS节目制作与管理系统,Linux和Window平台上基于AVS标准的流媒体播出、点播、回放软件。

(3). 整机:AVS机顶盒、AVS硬盘播出服务器、AVS编码器、AVS高清晰度激光视盘机、AVS高清晰度数字电视机顶盒和接收机、AVS手机、AVS便携式数码产品等。

MPEG是ISO/IEC JTC1 1988年成立的运动图像专家组(Moving Picture Expert Group)的简称,负责数字视频、音频和其它媒体的压缩、解压缩、处理和表示等国际技术标准的制定工作

MPEG-1制定于1992年,它是将视频数据压缩成1~2Mb/s的标准数据流。它主要用于家用VCD,它需要的存储空间比较大。

MPEG-2制定于1994年,是为高级工业标准的图像质量以及更高的传输率而设计,它是高质量视频音频编码标准。在常规电视的数字化、高清晰电视HDTV、视频点播VOD,交互式电视等各个领域中都是核心的技术之一。

MPEG-4于1998年11月公布,主要应用于视像电话(Video Phone),视像电子邮件(Video Email)和电子新闻(Electronic News)等,其传输速率要求较低。它与MPEG-2相比,可节省90%的储存空间。MPEG-4标准是面向对象的压缩方式,不是像MPEG-1和MPEG-2简单地将图像分为一些像块,而是根据图像内容,将其中的对象(物体、人物、背景)分离出来分别进行帧内、帧间编码压缩,并允许在不同的对象之间灵活分配码率,对重要的对象分配较多的字节,对次要的对象分配较少的字节,从而大大提高了压缩比,使其在较低的码率下获得较好的效果。

MPEG-7是针对存储形式(在线、脱机)或流形式(如 Internet上的广播、推送模型)的应用而制定的,并且可以在实时和非实时环境中操作。它是为互联网视频检索制定的压缩标准。MPEG-7标准的正式名称为”多媒体内容描述接口”(Multimedia Content Description Interface), 其目标就是产生一种描述多媒体内容数据的标准,满足实时、非实时以及推-拉应用的需求,它既不同于基于波形和基于压缩的表示方式如MPEG-1和MPEG -2,又不同于基于对象的表示方式如MPEG-4,而是将对各种不同类型的多媒体信息进行标准化描述,并将该描述与所描述的内容相联系,以实现快速有效的搜索。

MPEG-21 Multimedia Framework是致力于在大范围的网络上实现透明的传输和对多媒体资源的充分利用。MPEG-21致力于为多媒体传输和使用定义一个标准化的开放框架。

WMV(WINDOWS MEDIA VIDEO):是微软推出的一种流媒体格式,WMV格式的体积非常小,适合在网上播放和传输。但由于非开放性标准,时延非常大。

H.261:于1990年完成,实际的编码算法类似于MPEG算法,但不能与后者兼容。用于电视会议、可视电话。

H.263:于1996年完成,与H.261相比采用了半象素的运动补偿,并增加了4种有效的压缩编码模式。但是其限制了应用的图像输入格式,仅允许5种视频源格式。

H.263+:允许更大范围的图像输入格式,自定义图像的尺寸,从而拓宽了标准使用的范围,使之可以处理基于视窗的计算机图像、更高帧频的图像序列及宽屏图像。

H.263++:在H263+基础上增加了3个选项,主要是为了增强码流在恶劣信道上的抗误码性能,同时为了提高增强编码效率。

H.264/MPEG-4 AVC:压缩能力比H.263更强。高压缩比、高图像质量、良好的网络适应性,在较低带宽上提供高质量的图像传输。是为新一代交互视频通讯制定的标准。该标准也被称为AVC(Advanced Video Coding)标准,是MPEG-4的第10部分。

H.265:是继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。H.265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频。这也意味着,我们的智能手机、平板机等移动设备将能够直接在线播放1080p的全高清视频。H.265标准也同时支持4K(4096×2160)和8K(8192×4320)超高清视频。

IPB:视频中每帧代表一幅静止的图像,而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。

I帧是关键帧,属于帧内压缩(P、B为帧间)。尽可能去除图像空间冗余信息来压缩传输数据量的帧内编码图像。I帧法是基于离散余弦变换DCT(Discrete Cosine Transform)的压缩技术,这种算法与JPEG压缩算法类似。采用I帧压缩可达到1/6的压缩比而无明显的压缩痕迹。解码时仅用I帧的数据就可重构完整图像。

P帧也叫预测帧,表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据。

B帧也叫双向预测帧。既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像。B帧不是参考帧,不会造成解码错误的扩散。

一般地,I帧压缩效率最低,P帧较高,B帧最高。I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧,至于图像中的哪一帧是I帧,是随机的,一旦确定确定了I帧,以后的各帧就严格按规定顺序排列。

视频文件封装(容器):封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,这个文件也就相当于一个容器。采用不同的方式把视频编码和音频编码打包成一个完整的多媒体文件,也就出现了不同的后缀,常见的封装格式:

(1). AVI:微软在90年代初创立的封装标准,其含义是Audio Video Interactive,就是把视频和音频编码混合在一起储存。

(2). mov:QuickTime Movie是由苹果公司开发的容器。

(3). WMV:是微软公司开发的一组数位视频编解码格式的通称。

(4). mkv: Matroska的简称,万能封装器,有良好的兼容和跨平台性、纠错性,可带外挂字幕。

(5). flv: 这种封装方式可以很好的保护原始地址,一些视频分享网站采用这种封装方式。

(6). rmvb/rm:Real Video,由RealNetworks开发的应用于rmvb和rm的不同封装方式。rm是固定码率,rmvb是动态码率(就是静态画面采用用低码率,动态采用高码率)。

(7). MP4:主要应用于mpeg4的封装。

(8). 3GP:主要应用于H.263的封装。

由于不同的播放器支持不同的视频文件格式,或者计算机中缺少相应格式的解码器,或者一些外部播放装置(比如手机、MP4等)只能播放固定的格式,因此就会出现视频无法播放的现象。在这种情况下就要使用格式转换器软件来弥补这一缺陷。

注:以上全部内容均来自网络,主要参考:

1. http://www.avs.org.cn/

2. https://blog.csdn.net/leixiaohua1020/article/details/12031631 

Android视频编解码

阅读数 424

没有更多推荐了,返回首页