精华内容
下载资源
问答
  • FFmpeg之FFprobe检测多媒体格式

    万次阅读 2020-01-12 23:43:50
    FFmpeg里面一个模块FFprobe(https://ffmpeg.org/ffprobe.html)专门用来检测多媒体格式数据,它的作用类似Android中的MediaMetadataRetriever。FFprobe支持检测format、streams、frames,用法与FFmpeg类似,我们...

    FFmpeg里面有一个模块FFprobehttps://ffmpeg.org/ffprobe.html)专门用来检测多媒体格式数据,它的作用类似Android中的MediaMetadataRetriever。FFprobe支持检测format、streams、frames,用法与FFmpeg类似,我们可以单独使用,也可以结合在一起使用,下面举例说明一下:

    1、format

    仅是显示format:ffprobe -i xxx.mp4 -show_format

    既显示又打印format:ffprobe -i xxx.mp4 -show_format -print_format json

    2、streams

    显示音视频流:ffprobe -i xxx.mp4 -show_streams

    3、frames

    显示视频帧:ffprobe -i xxx.mp4 -show_frames

    4、format与streams

    ffprobe -i xxx.mp4 -show_streams -show_format -print_format json

    最终打印出来是json格式(也可以选择xml格式),我们需要解析一下json数据,提取我们需要的信息,最终数据如下图:

    看到上图,伙伴们有木有恍然大悟,感觉到与Android的MediaMetadataRetriever的功能似曾相识呢?FFprobe可以检测的多媒体信息包括:时长、码率、文件大小、封装格式、多媒体流的个数、视频分辨率、宽高比、像素格式、帧率、视频编码器、音频采样率、声道个数、声道布局、音频编码器等等。它比Android自带的MediaMetadataRetriever的优势在于:ffprobe可支持更多多媒体格式,兼容性好;而MediaMetadataRetriever取决于系统的硬解码器,不同手机的MediaCodec编解码能力存在差异。下面我们来具体讨论下FFprobe检测多媒体信息的实现过程:

    一、修改ffprobe源码

    在ffprobe.c源码中,是没有对外方法提供jni调用的,也没有返回字符串结果。所以我们需要修改下ffprobe.c源码:首先把main方法改为ffprobe_run方法,并且在ffprobe.h里面声明该方法,然后增加字符串打印方法。

    //ffprobe主函数入口
    char* ffprobe_run(int argc, char **argv)
    {
        const Writer *w;
        WriterContext *wctx;
        char *buf;
        char *w_name = NULL, *w_args = NULL;
        int ret, i;
    
        //动态申请内存
        buffer_length = 0;
        if(print_buffer == NULL) {
            print_buffer = av_malloc(sizeof(char) * buffer_size);
        }
        memset(print_buffer, '\0', (size_t) buffer_size);
    
        ...
    
        return print_buffer;
    }

    编写打印json字符串方法:

    void frank_printf_json(char *fmt, ...) 
    {
        va_list args;
        va_start(args, fmt);
        int length = printf_json(print_buffer + buffer_length, buffer_size - buffer_length, fmt, args);
        buffer_length += length;
        va_end(args);
    }

    在解析多媒体格式时,调用打印json字符串方法,把数据写入内存里:

    static void json_print_section_header(WriterContext *wctx)
    {
        JSONContext *json = wctx->priv;
        AVBPrint buf;
        const struct section *section = wctx->section[wctx->level];
        const struct section *parent_section = wctx->level ?
            wctx->section[wctx->level-1] : NULL;
    
        if (wctx->level && wctx->nb_item[wctx->level-1])
            frank_printf_json(",\n");
    
        if (section->flags & SECTION_FLAG_IS_WRAPPER) {
            frank_printf_json("{\n");
            json->indent_level++;
        } else {
            av_bprint_init(&buf, 1, AV_BPRINT_SIZE_UNLIMITED);
            json_escape_str(&buf, section->name, wctx);
            JSON_INDENT();
    
            json->indent_level++;
            if (section->flags & SECTION_FLAG_IS_ARRAY) {
                frank_printf_json("\"%s\": [\n", buf.str);
            } else if (parent_section && !(parent_section->flags & SECTION_FLAG_IS_ARRAY)) {
                frank_printf_json("\"%s\": {%s", buf.str, json->item_start_end);
            } else {
                frank_printf_json("{%s", json->item_start_end);
    
                /* this is required so the parser can distinguish between packets and frames */
                if (parent_section && parent_section->id == SECTION_ID_PACKETS_AND_FRAMES) {
                    if (!json->compact)
                        JSON_INDENT();
                    frank_printf_json("\"type\": \"%s\"%s", section->name, json->item_sep);
                }
            }
            av_bprint_finalize(&buf, NULL);
        }
    }
    
    static void json_print_section_footer(WriterContext *wctx)
    {
        JSONContext *json = wctx->priv;
        const struct section *section = wctx->section[wctx->level];
    
        if (wctx->level == 0) {
            json->indent_level--;
            frank_printf_json("\n}\n");
        } else if (section->flags & SECTION_FLAG_IS_ARRAY) {
            frank_printf_json("\n");
            json->indent_level--;
            JSON_INDENT();
            frank_printf_json("]");
        } else {
            frank_printf_json("%s", json->item_start_end);
            json->indent_level--;
            if (!json->compact)
                JSON_INDENT();
            frank_printf_json("}");
        }
    }
    
    static inline void json_print_item_str(WriterContext *wctx,
                                           const char *key, const char *value)
    {
        AVBPrint buf;
    
        av_bprint_init(&buf, 1, AV_BPRINT_SIZE_UNLIMITED);
        frank_printf_json("\"%s\":", json_escape_str(&buf, key,   wctx));
        av_bprint_clear(&buf);
        frank_printf_json(" \"%s\"", json_escape_str(&buf, value, wctx));
        av_bprint_finalize(&buf, NULL);
    }
    
    static void json_print_str(WriterContext *wctx, const char *key, const char *value)
    {
        JSONContext *json = wctx->priv;
    
        if (wctx->nb_item[wctx->level])
            frank_printf_json("%s", json->item_sep);
        if (!json->compact)
            JSON_INDENT();
        json_print_item_str(wctx, key, value);
    }
    
    static void json_print_int(WriterContext *wctx, const char *key, long long int value)
    {
        JSONContext *json = wctx->priv;
        AVBPrint buf;
    
        if (wctx->nb_item[wctx->level])
            frank_printf_json("%s", json->item_sep);
        if (!json->compact)
            JSON_INDENT();
    
        av_bprint_init(&buf, 1, AV_BPRINT_SIZE_UNLIMITED);
        frank_printf_json("\"%s\": %lld", json_escape_str(&buf, key, wctx), value);
        av_bprint_finalize(&buf, NULL);
    }

    二、封装jni方法

    提供jni方法,供java层调用ffprobe_run(),实现多媒体格式的解析:

    FFMPEG_FUNC(jstring , handleProbe, jobjectArray commands) {
        int argc = (*env)->GetArrayLength(env, commands);
        char **argv = (char**)malloc(argc * sizeof(char*));
        int i;
        for (i = 0; i < argc; i++) {
        jstring jstr = (jstring) (*env)->GetObjectArrayElement(env, commands, i);
        char* temp = (char*) (*env)->GetStringUTFChars(env, jstr, 0);
        argv[i] = malloc(1024);
        strcpy(argv[i], temp);
        (*env)->ReleaseStringUTFChars(env, jstr, temp);
        }
        //execute ffprobe command
        char* result =  ffprobe_run(argc, argv);
        //release memory
        for (i = 0; i < argc; i++) {
        free(argv[i]);
        }
        free(argv);
    
        return (*env)->NewStringUTF(env, result);
    }

    三、java层调用jni方法

    在java层使用native关键字声明jni方法,开启子线程调用:

    /**
     * execute probe cmd internal
     * @param commands commands
     * @param onHandleListener onHandleListener
     */
    public static void executeProbe(final String[] commands, final OnHandleListener onHandleListener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                if(onHandleListener != null) {
                    onHandleListener.onBegin();
                }
                //execute ffprobe
                String result = handleProbe(commands);
                int resultCode = !TextUtils.isEmpty(result) ? RESULT_SUCCESS : RESULT_ERROR;
                if(onHandleListener != null) {
                    onHandleListener.onEnd(resultCode, result);
                }
            }
        }).start();
    }
    
    private native static String handleProbe(String[] commands);

    四、监听FFprobe运行状态

    传入字符串参数,调用executeFFprobeCmd方法,实现onHandlerListener监听:

    /**
     * execute probe cmd
     * @param commandLine commandLine
     */
    public void executeFFprobeCmd(final String[] commandLine) {
        if(commandLine == null) {
            return;
        }
        FFmpegCmd.executeProbe(commandLine, new OnHandleListener() {
            @Override
            public void onBegin() {
                mHandler.obtainMessage(MSG_BEGIN).sendToTarget();
            }
    
            @Override
            public void onEnd(int resultCode, String resultMsg) {
                MediaBean mediaBean = null;
                if(resultMsg != null && !resultMsg.isEmpty()) {
                    mediaBean = JsonParseTool.parseMediaFormat(resultMsg);
                }
                mHandler.obtainMessage(MSG_FINISH, mediaBean).sendToTarget();
            }
        });
    }

    五、封装FFprobe命令

    在文章的开头,我们已经介绍过ffprobe命令,更多更详细的命令请参考文档:https://ffmpeg.org/ffprobe.html.ffprobe命令结构分为三部分:ffprobe+(-i filePath)输入文件路径+(-show_streams -show_frames -show_format)执行主体。

    public static String[] probeFormat(String inputFile) {
        String ffprobeCmd = "ffprobe -i %s -show_streams -show_format -print_format json";
        ffprobeCmd = String.format(Locale.getDefault(), ffprobeCmd, inputFile);
        return ffprobeCmd.split(" ");
    }

    六、解析json数据

    调用FFprobe函数,返回json字符串结果后,我们需要进一步解析,提取我们需要的信息:

    public static MediaBean parseMediaFormat(String mediaFormat) {
            if (mediaFormat == null || mediaFormat.isEmpty()) {
                return null;
            }
            MediaBean mediaBean = null;
            try {
                JSONObject jsonMedia = new JSONObject(mediaFormat);
                JSONObject jsonMediaFormat = jsonMedia.getJSONObject("format");
                mediaBean = new MediaBean();
                int streamNum = jsonMediaFormat.optInt("nb_streams");
                mediaBean.setStreamNum(streamNum);
                String formatName = jsonMediaFormat.optString("format_name");
                mediaBean.setFormatName(formatName);
                String bitRateStr = jsonMediaFormat.optString("bit_rate");
                if (!TextUtils.isEmpty(bitRateStr)) {
                    mediaBean.setBitRate(Integer.valueOf(bitRateStr));
                }
                String sizeStr = jsonMediaFormat.optString("size");
                if (!TextUtils.isEmpty(sizeStr)) {
                    mediaBean.setSize(Long.valueOf(sizeStr));
                }
                String durationStr = jsonMediaFormat.optString("duration");
                if (!TextUtils.isEmpty(durationStr)) {
                    float duration = Float.valueOf(durationStr);
                    mediaBean.setDuration((long) duration);
                }
    
                JSONArray jsonMediaStream = jsonMedia.getJSONArray("streams");
                if (jsonMediaStream == null) {
                    return mediaBean;
                }
                for (int index = 0; index < jsonMediaStream.length(); index ++) {
                    JSONObject jsonMediaStreamItem = jsonMediaStream.optJSONObject(index);
                    if (jsonMediaStreamItem == null) continue;
                    String codecType = jsonMediaStreamItem.optString("codec_type");
                    if (codecType == null) continue;
                    if (codecType.equals(TYPE_VIDEO)) {
                        VideoBean videoBean = new VideoBean();
                        mediaBean.setVideoBean(videoBean);
                        String codecName = jsonMediaStreamItem.optString("codec_tag_string");
                        videoBean.setVideoCodec(codecName);
                        int width = jsonMediaStreamItem.optInt("width");
                        videoBean.setWidth(width);
                        int height = jsonMediaStreamItem.optInt("height");
                        videoBean.setHeight(height);
                        String aspectRatio = jsonMediaStreamItem.optString("display_aspect_ratio");
                        videoBean.setDisplayAspectRatio(aspectRatio);
                        String pixelFormat = jsonMediaStreamItem.optString("pix_fmt");
                        videoBean.setPixelFormat(pixelFormat);
                        String profile = jsonMediaStreamItem.optString("profile");
                        videoBean.setProfile(profile);
                        int level = jsonMediaStreamItem.optInt("level");
                        videoBean.setLevel(level);
                        String frameRateStr = jsonMediaStreamItem.optString("r_frame_rate");
                        if (!TextUtils.isEmpty(frameRateStr)) {
                            String[] frameRateArray = frameRateStr.split("/");
                            double frameRate = Math.ceil(Double.valueOf(frameRateArray[0]) / Double.valueOf(frameRateArray[1]));
                            videoBean.setFrameRate((int) frameRate);
                        }
                    } else if (codecType.equals(TYPE_AUDIO)) {
                        AudioBean audioBean = new AudioBean();
                        mediaBean.setAudioBean(audioBean);
                        String codecName = jsonMediaStreamItem.optString("codec_tag_string");
                        audioBean.setAudioCodec(codecName);
                        String sampleRateStr = jsonMediaStreamItem.optString("sample_rate");
                        if (!TextUtils.isEmpty(sampleRateStr)) {
                            audioBean.setSampleRate(Integer.valueOf(sampleRateStr));
                        }
                        int channels = jsonMediaStreamItem.optInt("channels");
                        audioBean.setChannels(channels);
                        String channelLayout = jsonMediaStreamItem.optString("channel_layout");
                        audioBean.setChannelLayout(channelLayout);
                    }
                }
            } catch (Exception e) {
                Log.e(TAG, "parse error=" + e.toString());
            }
            return mediaBean;
        }

    折腾这么久,终于解析到多媒体格式相关数据了,详细源码可以到Github查看:https://github.com/xufuji456/FFmpegAndroid

    展开全文
  • 多媒体格式

    千次阅读 2009-04-27 10:53:00
    流(Stream)媒体格式是将一个资料(动画、影音等)分段传送,用户不必等待整个内容传送完毕,就可以观看到即时的连续的内容,甚至可以随时的暂停、快进、快倒。由于不同的公司发展的文件格式不同,传送的方式也有所...

      流(Stream)媒体格式是将一个资料(动画、影音等)分段传送,用户不必等待整个内容传送完毕,就可以观看到即时的连续的内容,甚至可以随时的暂停、快进、快倒。由于不同的公司发展的文件格式不同,传送的方式也有所差异,因此,我们必须非常清楚各种流媒体文件的格式。

    1 RealVideo的.rm视频影像格式和.ra的音频格式

      .ra格式是RealNetworks公司所开发的一种新型流式音频Real Audio文件格式。.rm格式则是流式视频Real Vedio文件格式,主要用来在低速率的网络上实时传输活动视频影像,可以根据网络数据传输速率的不同而采用不同的压缩比率,在数据传输过程中边下载边播放视频影像,从而实现影像数据的实时传送和播放。客户端通过RealPlayer播放器进行播放。

     

    2 Microsoft Media technology的.asf格式

      Microsoft Media technology的ASF也是流行一种网上流媒体格式。它的使用与windows操作系统是分不开的,其播放器MicrosoftMedia Player已经与windows捆绑在一起,不仅用于Web方式播放,还可以用于在浏览器以外的地方来播放影音文件。

      ASF是 Microsoft 为 Windows 98 所开发的串流多媒体文件格式。ASF是微软公司Windows Media的核心。这是一种包含音频、视频、图像以及控制命令脚本的数据格式。这个词汇当前可和 WMA 及 WMV 互换使用。

     ASF参考文献地址

     

    3 QuickTim的.qt格式

      QuickTimeMovie的.qt格式是Apple公司开发的一种音频、视频文件格式,用于保存音频和视频信息,具有先进的音频和视频功能,由包括Apple MacOS,Microsoft Windows 95/98/NT在内的所有主流计算机操作系统支持。Quicktime文件格式支持25 位彩色,支持RLC、JPEG等领先的集成压缩技术,提供150多种视频效果。

     

    4 Flash的.swf格式

      SWF是基于Macromedia公司Shockwave技术的流式动画格式,是用Flash软件制作的一种格式,源文件为.fla格式,由于其体积小、功能强、交互能力好、支持多个层和时间线程等特点,故越来越多地应用到网络动画中。SWF文件是Flash的其中一种发布格式,已广泛用于Internet上,客户端安装Shockwave的插件即可播放。

     

    5 Metastream 的.mts格式

      MetaCreations公司的网上流式三维技术MetaStream实现英特网上流式三维网页的浏览,它是一种新兴的网上3D开放文件标准(基于Intel构架),主要用于创建、发布及浏览可以放缩的3D图形和开发电脑游戏。

     

    6 Authorware的.aam多媒体教学课件格式

      纵观市场上的计算机辅助教学(简称CAI)课件,我国多采用像Authorware等多媒体制作工具,这类课件利用Shockwave技术和WebPackage软件可以把Authorware生成的文件压缩为.aam和.aas流式文件格式为播放;也可以用Director生成后,利用Shockwave技术改造为网上传输的流式多媒体课件。

     

    7 3GP是一个多媒体储存格式,由Third Generation Partnership Project(3GPP)定义,主要用于3G手机


    8 avi  AVI英文全称为Audio Video Interleaved,即音频视频交错格式。是将语音和影像同步组合在一起的 文件格式。它对视频文件采用了一种有损压缩方式,但压缩比较高,因此尽管面面质量不是太好,但其应用范围仍然非常广泛。AVI支持256色和RLE压缩。 AVI信息主要应用在多媒体光盘上,用来保存电视、电影等各种影像信息。

     

    9 FLV是Flash Video的简称,是一种网络视频格式。随着网络视频网站的丰富;这个格式,在以后也将会非常的普及。

    FLV是 FLASH VIDEO 的简称,FLV串流媒体格式是一种新的视频格式,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上有效使用等缺点。

    一般 FLV 包在 SWF PLAYER 的壳里,并且 FLV 可以很好的保护原始地址,不容易被下载到,从而起到保护版权的作用。

    10 Ogg是一个自由开放标准容器格式,由Xiph.Org 基金会所维护。Ogg格式并不受到软件专利的限制,并设计用于有效率地流式媒体和处理高品质的数字多媒体

    “Ogg”意指一种文件格式,可以纳入各式各样自由开放源代码编解码器,包含音效视频、文字(像字幕)与元数据的处理。

    在Ogg的多媒体框架下,Theora提供有损的图像层面,而通常用音乐导向的Vorbis编解码器作为音效层面。人类演说的压缩编解码器Speex无损的音效压缩编解码器FLACOggPCM也可能作为音效层面使用。

    “Ogg”这个词汇通常意指Ogg Vorbis此一音频文件格式,也就是将Vorbis编码的音效包含在Ogg的容器中所成的格式。在以往,.ogg此一扩展名曾经被用在任何Ogg支持格式下的内容,但在2007年,Xiph.Org基金会为了向后兼容的考量,提出请求,将.ogg只留给Vorbis格式来使用。 Xiph.Org基金会决定创造一些新的扩展名和媒体格式来描述不同类型的内容,像是只包含音效所用的.oga,包含或不含声音的影片(涵盖Theora)所用的.ogv和程序所用的.ogx。[1]

    Xiph.Org基金会对Ogg的参照实装,目前最新的版本是2005年11月27日释出的libogg 1.1.3。[2]另一个版本libogg2也可以在Xiph.Org基金会的SVN包库中找到。这两个函数库都是在新BSD许可证下释出的自由软件

    因为其格式自由,和其参照实装并非Copyleft形式,无论自由或专有、商业或非商业的媒体播放器,甚至部分制造商的可携式媒体播放器全球定位系统接收器都采用了Ogg下的各种编解码器。

    11 WAV(或 WAVE)是微软公司开发的一种声音文件格式,也叫波形声音文件,被Windows平台及其应用程序广泛支持。

    展开全文
  • 1.Network Protocols RTSP (RTP, SDP) HTTP progressive streaming HTTP live streaming draft protocol (Android 3.0 and above) Note: HTTPS is not supported at this time. ...2.Core Media Formats

    1.Network Protocols

    RTSP (RTP, SDP)
    HTTP progressive streaming
    HTTP live streaming draft protocol (Android 3.0 and above)
    Note: HTTPS is not supported at this time.

    2.Core Media Formats



    展开全文
  • 常用多媒体文件格式

    千次阅读 2016-05-27 17:28:20
    常用多媒体文件格式 图片格式 文件格式或后缀 描述 1 BMP Windows 位图 2 PCX PC 画笔 3 PNG 可移植网络图形 4 JPEG 联合摄影专家组 5 GIF 图形交换格式 6 ...

     

     

    常用多媒体文件格式
    图片格式 文件格式或后缀 描述
    1 BMP Windows 位图 
    2 PCX PC 画笔 
    3 PNG 可移植网络图形 
    4 JPEG 联合摄影专家组 
    5 GIF 图形交换格式 
    6 TIFF 标记图像文件格式 
    7 DXF AutoCAD 绘图交换文件 
    8 CGM 计算机图形图元文件 
    9 CDR CorelDRAW! 
    10 WMF Windows 图元文件 
    11 EPS Encapsulated PostScript 
    12 EMF 增强型图元文件 
    13 PICT Macintosh 图片 
    视频格式 文件格式或后缀 描述
    1 MPEG/MPG/DAT  (运动图像专家组)是Motion Picture Experts Group 的缩写。这类格式包括了MPEG-1,MPEG-2和MPEG-4在内的多种视频格式。
    2 AVI 音频视频交错(Audio Video Interleaved)的英文缩写
    3 MOV Mac机的QuickTime支持的数字视频格式,基于Indeo压缩法
    4 ASF (Advanced Streaming format高级流格式)。ASF 是MICROSOFT 为了和的Real player 竞争而发展出来的一种可以直接在网上观看视频节目的文件压缩格式。
    5 WMV 一种独立于编码方式的在Internet上实时传播多媒体的技术标准,Microsoft公司希望用其取代QuickTime之类的技术标准以及WAV、AVI之类的文件扩展名。
    6 NAVI n AVI是New AVI 的缩写,是一个名为Shadow Realm 的地下组织发展起来的一种新视频格式。
    7 3GP 一种3G流媒体的视频编码格式,主要是为了配合3G网络的高传输速度而开发的,也是目前手机中最为常见的一种视频格式。
    8 REAL VIDEO (RA、RAM)格式由一开始就是定位在视频流应用方面的,也可以说是视频流技术的始创者。
    9 MKV 种后缀为MKV的视频文件频频出现在网络上,它可在一个文件中集成多条不同类型的音轨和字幕轨,而且其视频编码的自由度也非常大,可以是常见的DivX、XviD、3IVX,甚至可以是RealVideo、QuickTime、WMV 这类流式视频。实际上,它是一种全称为Matroska的新型多媒体封装格式
    10 FLV 是FLASH VIDEO的简称,FLV流媒体格式是一种新的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。
    11 F4V F4V是Adobe公司为了迎接高清时代而推出继FLV格式后的支持H.264的F4V流媒体格式。它和FLV主要的区别在于,FLV格式采用的是H263编码,而F4V则支持H.264编码的高清晰视频,码率最高可达50Mbps。也就是说F4V和FLV在同等体积的前提下,能够实现更高的分辨率,并支持更高比特率,就是我们所说的更清晰更流畅。另外,很多主流媒体网站上下载的F4V文件后缀却为FLV,这是F4V格式的另一个特点,属正常现象,观看时可明显感觉到这种实为F4V的FLV有明显更高的清晰度和流畅度。
    12 RMVB RMVB的前身为RM格式,它们是Real Networks公司所制定的音频视频压缩规范,根据不同的网络传输速率,而制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放,具有体积小,画质也还不错的优点。
    13 WebM 由Google提出,是一个开放、免费的媒体文件格式。WebM 影片格式其实是以 Matroska(即 MKV)容器格式为基础开发的新容器格式,里面包括了 VP8 影片轨和 Ogg Vorbis 音轨,其中Google将其拥有的VP8视频编码技术以类似BSD授权开源,Ogg Vorbis 本来就是开放格式。 WebM标准的网络视频更加偏向于开源并且是基于HTML5标准的,WebM 项目旨在为对每个人都开放的网络开发高质量、开放的视频格式,其重点是解决视频服务这一核心的网络用户体验。Google 说 WebM 的格式相当有效率,应该可以在 netbook、tablet、手持式装置等上面顺畅地使用
    音频格式 文件格式或后缀 描述
    1 CD CD格式的音质是比较高的音频格式。因此要讲音频格式,CD自然是打头阵的先锋。在大多数播放软件的“打开文件类型”中,都可以看到*.cda格式,这就是CD音轨了。标准CD格式也就是44.1K的采样频率,速率88K/秒,16位量化位数,因为CD音轨可以说是近似无损的,因此它的声音基本上是忠于原声的,因此如果你是一个音响发烧友的话,CD是你的首选。
    2 WAVE (*.WAV)是微软公司开发的一种声音文件格式,它符合PIFFResource Interchange File Format 文件规范,用于保存WINDOWS平台的音频信息资源,被WINDOWS平台及其应用程序所支持。
    3 AIFF (Audio Interchange File Format)格式和AU格式,它们都和WAV非常相像,在大多数的音频编辑软件中也都支持它们这几种常见的音乐格式。AIFF是音频交换文件格式的英文缩写。是APPLE公司开发的一种音频文件格式,被MACINTOSH平台及其应用程序所支持,NETSCAPE浏览器中LIVEAUDIO也支持AIFF格式。所以大家都不常见。AIFF是Apple苹果电脑上面的标准音频格式,属于QuickTime技术的一部分。
    4 AU AUDIO文件是SUN公司推出的一种数字音频格式。AU文件原先是UNIX操作系统下的数字声音文件。由于早期INTERNET上的WEB服务器主要是基于UNIX的,所以,AU格式的文件在如今的INTERNET中也是常用的声音文件格式。
    5 MPEG MPEG是动态图象专家组的英文缩写。这个专家组始建于1988年,专门负责为CD建立视频和音频压缩标准。MPEG音频文件指的是MPEG标准中的声音部分即MPEG音频层。目前INTERNET上的音乐格式以MP3最为常见。虽然它是一种有损压缩,但是它的最大优势是以极小的声音失真换来了较高的压缩比。MPEG含有格式包括:MPEG-1、MPEG-2、MPEG-Layer3、MPEG-4
    6 MP3 MP3格式诞生于八十年代的德国,所谓的MP3也就是指的是MPEG标准中的音频部分,也就是MPEG音频层。根据压缩质量和编码处理的不同分为3层,分别对应“*.mp1"/“*.mp2”/“*.mp3”这3种声音文件。需要提醒大家注意的地方是:MPEG音频文件的压缩是一种有损压缩,MPEG3音频编码具有10:1~12:1的高压缩率,同时基本保持低音频部分不失真,但是牺牲了声音文件中12KHz到16KHz高音频这部分的质量来换取文件的尺寸,相同长度的音乐文件,用*.mp3格式来储存,一般只有*.wav文件的1/10,因而音质要次于CD格式或WAV格式的声音文件。由于其文件尺寸小,音质好;所以在它问世之初还没有什么别的音频格式可以与之匹敌,因而为*.mp3格式的发展提供了良好的条件。
    7 MPEG-4 是由国际运动图像专家组于2000年10月公布的一种面向多媒体应用的视频压缩标准。它采用了基于对象的压缩编码技术,在编码前首先对视频序列进行分析,从原始图像中分割出各个视频对象,然后再分别对每个视频对象的形状信息、运动信息、纹理信息单独编码,并通过比MPEG-2更优的运动预测和运动补偿来去除连续帧之间的时间冗余。
    8 MIDI (Musical Instrument Digital Interface)格式被经常玩音乐的人使用,MIDI允许数字合成器和其他设备交换数据。MID文件格式由MIDI继承而来。MID文件并不是一段录制好的声音,而是记录声音的信息,然后再告诉声卡如何再现音乐的一组指令。这样一个MIDI文件每存1分钟的音乐只用大约5~10KB。MID文件主要用于原始乐器作品,流行歌曲的业余表演,游戏音轨以及电子贺卡等。
    9 WMA  (Windows Media Audio) 格式是来自于微软的重量级选手,后台强硬,音质要强于MP3格式,更远胜于RA格式,它和日本YAMAHA公司开发的VQF格式一样,是以减少数据流量但保持音质的方法来达到比MP3压缩率更高的目的,WMA的压缩率一般都可以达到1:18左右,WMA的另一个优点是内容提供商可以通过DRM(Digital Rights Management)方案如Windows Media Rights Manager 7加入防拷贝保护。
    10 RealAudio 主要适用于在网络上的在线音乐欣赏,现在大多数的用户仍然在使用56Kbps或更低速率的Modem,所以典型的回放并非最好的音质。有的下载站点会提示你根据你的Modem速率选择最佳的Real文件。real的的文件格式主要有这么几种:有RA(RealAudio)、RM(RealMedia,RealAudio G2)、RMX(RealAudio Secured),还有更多。这些格式的特点是可以随网络带宽的不同而改变声音的质量,在保证大多数人听到流畅声音的前提下,令带宽较富裕的听众获得较好的音质。
    11 VQF 雅马哈公司另一种格式是*.vqf,它的核心是减少数据流量但保持音质的方法来达到更高的压缩比,VQF的音频压缩率比标准的MPEG音频压缩率高出近一倍,可以达到18:1左右甚至更高。也就是说把一首4分钟的歌曲(WAV文件)压成MP3,大约需要4MB左右的硬盘空间,而同一首歌曲,如果使用VQF音频压缩技术的话,那只需要2MB左右的硬盘空间。
    12 OggVorbis 是一种新的音频压缩格式,类似于MP3等现有的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的。Vorbis是这种音频压缩机制的名字,而Ogg则是一个计划的名字,该计划意图设计一个完全开放性的多媒体系统。目前该计划只实现了OggVorbis这一部分。
    13 AMR 全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频,压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话,效果还是很不错的。

     

    展开全文
  • 本文档描述了Android平台提供的媒体编解码器、容器和网络协议支持。 作为应用程序开发人员,...下表描述了安卓平台内置的媒体格式支持。 不能保证在所有Android平台版本上都可用的编解码器在括号中注明,例如:...
  • html5多媒体格式支持

    2016-07-25 15:20:44
    音频播放上只能支持mp3 wav 视频播放只能支持 mp4(MPEG4标准) flv webm ogg swf 音频:amr...不支持 视频:rm,rmvb,avi,3gp,mov,wmv....不支持
  • 常见多媒体压缩格式

    千次阅读 2013-03-07 09:14:40
    多媒体压缩格式 视频压缩 ISO/IEC MJPEG · Motion JPEG 2000 · MPEG-1 · MPEG-2 (Part 2) · MPEG-4 (Part 2/ASP · Part 10/AVC) · HEVC ...
  • 多媒体文件格式分析

    千次阅读 2013-05-15 12:48:11
    最近在做多媒体相关的东西,看到CSDN上的一篇文章,关于各音视频文件格式的解析的,分享一下,参考源 http://blog.csdn.net/taniya001/article/details/7962864 mp3  MP3文件结构及编解码流程 aac AAC...
  • 1. 新兴的多媒体格式 MXF格式已经被推出几年了, 从当初一个陌生的不为人们 重视的格式 逐渐获得了业内人士的认知和认可, 现如今正被广泛应用于广播电视 与后期制作领域, 且不断扩大之势, 松下公司推出的...
  • 多媒体文件封装格式

    千次阅读 2017-03-17 15:19:20
    多媒体文件封装格式[top] 常见的封装格式有:TS、AVI、MKV、TP、MOV、M2T等等,它们与编码类型没有必然联系。不同的封装方式就好比是不同的盒子,高清视频要用它装起来才能呈现给观众。AVI AVI即音频视频交叉存取...
  • 微信多媒体文件原文链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;amp;amp;amp;amp;id=mp1444738727 1,安装speex环境 wget ...
  • 多媒体文件格式全解说

    千次阅读 2016-01-25 22:02:47
    发现很多做前端的,还是做后台的,对视频、音频的格式都不太了解,也不知道H5里面浏览器的适用方案是什么。此文作科普,只为给大家对众多的多媒体文件一个大概的认识,以便在需要的场合作出合适的选择。
  • * @Description: 多媒体格式转换工具类 * @author: ZXM * @date: 2018年9月29日 下午5:14:42 * @version V1.0 * @company: * @Copyright: */ public class MultimediaFormatConversionUtils { private ...
  • Android支持的多媒体格式

    千次阅读 2013-08-20 10:05:39
    Note: Media codecs(编码解码器codec的复数) that are not guaranteed(保证的;担保) to be available on all Android platform versions are accordingly(因此,相应地) noted in parentheses(parenthesis的复数...
  • Android之——多媒体开发视频格式

    千次阅读 2015-08-17 20:10:23
    AVI这个由微软公司发表的视频格式,在视频领域可以说是最悠久的格式之一。 AVI格式调用方便、图像质量好,压缩标准可任意选择,是应用最广泛的格式。 2,MOV 使用过Mac机的朋友应该多少接触过QuickTime。 QuickTime...
  • 各种多媒体容器格式sniff方法总结

    千次阅读 2013-06-27 17:10:52
    每种封装格式自己的判断方法,没事总结了一下。1、MP3MP3文件是一种流媒体文件格式,所以没有文件头,要判断是不是MP3文件只能分析帧头数据。MP3文件还可能存在TAG,两种TAG,ID3V1和ID3V2。ID3V1存放在MP3...
  • 多媒体SCM格式介绍

    千次阅读 2007-12-10 20:44:00
    SCM格式是一种支持DRM(Digital Rights Management 数字版权保护)的新兴媒体格式,它和以往的视频格式相比,有着更友好的DRM界面和更智能的播放权限判断系统,内嵌的网络接口也给版权商提供更多的网络功能支持。...
  • 多媒体文件格式简单介绍

    千次阅读 2010-02-05 17:04:00
    多媒体技术中,不外乎声音、图形、静态图像、动态图像等几种媒体形式。每一种媒体形式都严谨而规范的数据描述,其数据描述的逻辑表现形式是文件。■音频文件格式音频文件通常分为两类:声音文件和MIDI文件。...
  • 各种多媒体格式以及codec简析

    千次阅读 2009-11-12 17:33:00
    容器格式,像我们播放的多媒体格式比如说.mp4,.3gp,.avi,.asf 等等都是多媒体容器格式,他们包含多种编码格式的video和audio,在多媒体上的mux和demux就是将 文件 格式中的audio和video数据混合(mux)以及...
  • MediaErrors.h定义了多媒体格式的错误码,如常见的-1007错误为ERROR_MALFORMED,表示文件格式错误。 例如log输出: E/MediaPlayer( 649): error (1, -1007) 其中-1007即是ERROR_MALFORMED。 错误码的定义位于:...
  • 2、编译生成Chrome或chromium浏览器时,虽然网页音视频可以播放,但经常遇到某些格式无法打开,如mp4音视频或mpeg类型的音频文件。 问题1的原因: 多媒体文件播放所依赖的ffmpeg受编译时指定的branding...
  • 【持续更新】多媒体文件格式

    万次阅读 热门讨论 2007-09-22 12:13:00
    多媒体文件分析工具 【RIFFspot V1.0】2007.10.10 下载RIFF文件解析器,用树方式直观展现wav,avi等RIFF文件的结构信息 【MovSpot V1.0】2008.0
  • 关于七牛多媒体处理预设格式的小节 简述 音视频编码和容器格式的选择需要兼顾不同播放平台和播放器,同时还需要最少的资源消耗量和开发量。本文将详细分析一下七牛portal中“多媒体数据处理”的预设规格...
  • 多媒体计算机图像文件格式

    千次阅读 2009-11-04 13:11:00
    图形和图像以文件形式存储。图形和图像文件格式分两大类:一类是静态图像文件格式,一类是动态图像文件格式。静态图像文件格式有:GIF,TIF,BMP,PCX,JPG,PCD等;动态图像文件格式有AVI,MPG等。
  • android多媒体开发 音频格式比较

    千次阅读 2016-04-26 22:13:40
    音乐爱好者常见的音频格式有:flac、ape、wav、mp3、aac、ogg、wma 1.压缩比比较: aac>ogg>mp3(wma)>ape>flac>wav(同一音源条件下) mp3和wma以192kbps为分界线,192kbps以上mp3好,192kbps以下wma好。 2....
  • 项目Rtsp实时视频播放功能 ,现在要实现边播放边保存的功能要求。我在音视频方面技术处理白痴水平,所以 只能简单地实现先把h264格式的视频流保存到SD卡,再把对应地h264文件转码成MP4格式文件,然后删除原H264...
  • TS流是MPEG-2标准中定义一种用于直播的码流结构,...0. 学习多媒体容器格式的目的 主要是为了回答以下问题: 该容器中数据是如何组织的?该容器包含哪些编码格式的数据?这些数据是如何存储的?该容器包含哪些元数

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,513
精华内容 37,405
关键字:

多媒体格式有哪些