美文网首页
Android 音视频之音频编码转换

Android 音视频之音频编码转换

作者: 请叫我果爸 | 来源:发表于2018-10-19 18:21 被阅读0次

    简介

    我在之前文章《Android 音视频之音频AAC编码》中介绍过,如何将音频原始pcm数据进行AAC编码。本章,我简单介绍一下,Android对音频文件进行编码转换。编码转换,俗称转码,就是将音频文件的编码进行转换。我们需要先将音频文件解码成原始数据,再对原始数据编码成想要的音频文件。

    MediaExtractor

    MediaExtractor类,可以用来分离视频文件中的音频,字幕和视频轨道。

        /**
         * 初始化解码器
         */
        private void initMediaDecode() {
            try {
                mediaExtractor = new MediaExtractor();//此类可分离视频文件的音轨和视频轨道
                mediaExtractor.setDataSource(srcPath);//媒体文件的位置
                for (int i = 0; i < mediaExtractor.getTrackCount(); i++) {//遍历媒体轨道 
                    //此处我们传入的是音频文件,所以也就只有一条轨道
                    MediaFormat format = mediaExtractor.getTrackFormat(i);
                    String mime = format.getString(MediaFormat.KEY_MIME);
                    //此处注意前缀 音频前缀为audio,视频为video,字幕为text
                    //我们可用此区别区分媒体文件内的音频轨道和视频轨道
                    //mime的各种类型定义在MediaFormat静态常量中
                    if (mime.startsWith("audio")) {//获取音频轨道
                        mediaExtractor.selectTrack(i);//选择此音频轨道
                        mediaDecode = MediaCodec.createDecoderByType(mime);//创建对应格式的Decode解码器
                        mediaDecode.configure(format, null, null, 0);
                        break;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            if (mediaDecode == null) {
                Log.e(TAG, "create mediaDecode failed");
                return;
            }
            mediaDecode.start();//启动MediaCodec ,等待传入数据
            decodeInputBuffers = mediaDecode.getInputBuffers();//MediaCodec在此ByteBuffer[]中获取输入数据
            decodeOutputBuffers = mediaDecode.getOutputBuffers();//MediaCodec将解码后的数据放到此ByteBuffer[]中 我们可以直接在这里面得到PCM数据
            decodeBufferInfo = new MediaCodec.BufferInfo();//用于描述解码得到的byte[]数据的相关信息
        }
    

    案例

    因为没有mp3的资源,所以我就随便去qq音乐的排行榜下载了一首歌,G.E.M邓紫棋的《光年之外》,挺好听的。通过ffmpeg查看了这首mp3的信息。


    可以从打印的内容中看到这首mp3重要的信息。44.1khz,(stereo)多声道,码率128kb/s,LAME编码。不知道为什么qq音乐没有使用aac编码,不过正好,我们可以将他转码成aac编码文件。

    转码成功后,我们把他pull到电脑上。


    可以看到,下载的mp3文件,3769367个字节,大概3.6MB,而我们进行转码过的aac文件,只有1.3MB的大小。但是音质上,基本听不出有任何的区别。

    最近双十一临近,没太多时间更新,请大家原谅。

    未完待更新...

    github项目地址

    上一篇:Android 音视频之音频编码

    有问题的地方请大家帮忙指出,谢谢。
    持续更新中...

    相关文章

      网友评论

          本文标题:Android 音视频之音频编码转换

          本文链接:https://www.haomeiwen.com/subject/bdsuzftx.html