安卓视频处理总结

04-04 16:55:57.099 28015-28195/com.rockylearnstorock.testcamera D/MediaHelper: {csd-1=java.nio.ByteArrayBuffer[position=0,limit=8,capacity=8], mime=video/avc, frame-rate=30, rotation-degrees=270, height=144, width=176, max-input-size=5755, durationUs=21107833, csd-0=java.nio.ByteArrayBuffer[position=0,limit=20,capacity=20]}
04-04 16:55:57.106 28015-28195/com.rockylearnstorock.testcamera D/MediaHelper: {mime=audio/mpeg, durationUs=256835918, encoder-delay=576, channel-count=2, encoder-padding=1681, sample-rate=44100, bit-rate=128000}
04-04 16:55:57.106 28015-28195/com.rockylearnstorock.testcamera E/MPEG4Writer: Unsupported mime ‘audio/mpeg‘
04-04 16:55:57.107 28015-28195/com.rockylearnstorock.testcamera W/System.err: java.lang.IllegalStateException: Failed to add the track to the muxer
04-04 16:55:57.111 28015-28195/com.rockylearnstorock.testcamera W/System.err: at android.media.MediaMuxer.nativeAddTrack(Native Method)
04-04 16:55:57.111 28015-28195/com.rockylearnstorock.testcamera W/System.err: at android.media.MediaMuxer.addTrack(MediaMuxer.java:294)
04-04 16:55:57.112 28015-28195/com.rockylearnstorock.testcamera W/System.err: at com.rockylearnstorock.testcamera.MediaHelper.combineAudioVideo(MediaHelper.java:181)
04-04 16:55:57.112 28015-28195/com.rockylearnstorock.testcamera W/System.err: at com.rockylearnstorock.testcamera.MainActivity$2.run(MainActivity.java:399)
04-04 16:55:57.112 28015-28195/com.rockylearnstorock.testcamera W/System.err: at java.lang.Thread.run(Thread.java:818)

Google "Unsupported mime ‘audio/mpeg‘, 找到StackOverflow: Impossible to mix audio file and video file using MediaMuxer?

里面有个解释是

MediaMuxer does not transcode. If you write out an MPEG4 file, it will expect the video file to be MPEG4/AAC and the audio file to be an AAC file (m4a) as well.

Once you feed it with an m4a, muxing will succeed.

尝试将MP3换成m4a文件,合成,Negtive。

这个贴子里面还有个人发了一个github 例子,尝试, 合成的视频m4a的声音根本就没有加进去。Negtive.

Google " java.lang.IllegalStateException: Failed to add the track to the muxer", 返回的结果,都是" java.lang.IllegalStateException: Failed to stop the track to the muxer"。这个显然不是我要问的。

再看报错行

int audioTrackIndex = muxer.addTrack(audioFormat); //MediaHelper.java:181 报错行

显示是将audioFormat添加到muxer时报错了。

关于MP4和MP3的MediaFormat,打印结果见上面黄色部分:

MP4:{csd-1=java.nio.ByteArrayBuffer[position=0,limit=8,capacity=8], mime=video/avc, frame-rate=30, rotation-degrees=270, height=144, width=176, max-input-size=5755, durationUs=21107833, csd-0=java.nio.ByteArrayBuffer[position=0,limit=20,capacity=20]}

MP3:{mime=audio/mpeg, durationUs=256835918, encoder-delay=576, channel-count=2, encoder-padding=1681, sample-rate=44100, bit-rate=128000}

两者的编码一个是avc, 另一个是mpeg.

根据我的理解, 不同的编码可能造成这个方法报错的原因。因为,“Unsupported mime ‘audio/mpeg‘”。

MediaExtractor audioExtractor = new MediaExtractor();
        try {
            audioExtractor.setDataSource("/storage/emulated/0/DCIM/TestCamera/kisstherain.mp3");
        } catch (IOException e) {
            e.printStackTrace();
            Log.d("MediaHelper", "mp3 file can not be found");
            return;
        }

        MediaFormat audioFormat = null;
        for(int i = 0; i < audioExtractor.getTrackCount(); i++){
            audioFormat = audioExtractor.getTrackFormat(i);
            String mime = audioFormat.getString(MediaFormat.KEY_MIME);
            if(mime.startsWith("audio/")) {
                break;
            }
        }

        if(audioFormat == null){
            Log.d("MediaHelper", "audioFormat is null");
            return;
        }else{
            Log.d("MediaHelper", audioFormat.toString());
        }

        int audioTrackIndex = muxer.addTrack(audioFormat); //MediaHelper.java:181 报错行
时间: 2024-10-23 17:40:40

安卓视频处理总结的相关文章

资料分享----安卓视频和书籍

想自学Android,找了一些视频资料和文档,共享一下,希望能帮助你们一起进步. 视频资料: java视频: 传智播客毕向东老师视频:http://pan.baidu.com/s/1mg3Urgs 传智播客张孝祥老师视频:http://pan.baidu.com/s/1kTrfk8Z Android视频: Mars老师的1->5季视频:http://pan.baidu.com/s/1jGlb6V8 传智播客黎老师的视频   :http://pan.baidu.com/s/1c06S0Kw%20

常见安卓视频APP统计分析

根据9号下载站的安卓视频统计(41个):安卓视频编辑应用大全 外加几个GooglePlay的app(来自搜索video的结果) 大小排列如下:44个文件有29个文件是20M以上的大小 视频处app的体积普遍较大: 其中Camera360, 体积42M, 解压后72M, Lib中的so文件占了31M 我拍44M, 解压后79M, Lib文件40M 趣拍44M, 解压后67M, Lib文件9M 腾读微视31M, 解压后50M, Lib文件7M 解压后,(删除了一个与视频不相关的app, 剩43个)L

传智播客 安卓 视频 教程

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 传智播客 Android视频教程_传智播客和黑马程序员Android视频教程下载 step 01 初级教程 适用人群:有一定Java基础 学习周期:20天 市场价值初级Android工程师需求,薪资范围在6000~8000元/月. 学习后目标 1.能够根据项目需求,完成对应的模块设计与开发.2.能够担任初级Android工程师需求,可根据产品经理需求完成程序编写,多种分辨率的屏幕适配

安卓视频开发探索总结

[Android] Android(java方法)上实现mp4的分割和拼接 知乎:Android方面的音视频处理? Android视频录制app解决方案汇总 Android & IOS视频录制技术方案 How to merge an audio file with an image or video file in android? Is It Possible to merge audio to video in android? [closed] How to merge audio and

基于WebRtc实现安卓视频一对一聊天

WebRtc是谷歌2010年收购GlobalIPSolutions公司而获得的一项实时语音对话或视频对话的技术.之后谷歌将其开源,有很好的跨平台性.官方网址:https://webrtc.org/ 最近由于公司项目需求,刚刚接触webrtc,由于国内这方面的资料少之又少,学习起来也有点困难.这一个月来对webrtc也稍微有点了解吧,特此写个博客纪念下,结合自己写的小Demo给刚入坑的新人一点建议. 基本流程 使用webrtc###1. Maven <dependency> <groupI

与安卓交互的上传图片 与 上传语音、视频

1.与安卓语音的交互 注意:获取语音的src 需要用DOM元素获取 (1)HTML (点击按钮告诉安卓,录音开始与结束) <span class="voice" onclick="voicecli()">上传语音</span> (2)JS //点击语音 function voicecli() { $('.addPicture').hide(); $('.expaddVoice').show(); //调方法 //判断调安卓方法显示或隐藏语音

安卓学习————安卓控件之EditText

最近在看老罗的安卓视频,学着做了几小例子下面的代码是一个使用EditText输入特定字符的例子,这里只给出xml文件: <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="android:digits attribute number"/> <EditText android:layout

安卓学习课程

eoeAndroid网站,多逛一下教程的话自己随便找就行了书的话<疯狂android><第一行代码> [Android开发从零开始(1-10)].[疯狂Android讲义]等等 安卓视频我个人推荐IT学习联盟网站的<<安卓就业班>>(喜欢<安卓就业班>的可以复制 sina.lt/brxC 粘贴浏览器地址栏按回车键即打开).零基础android就业班包括android基础 进阶 高级 项目.是一套完整的android视频教程.它从零基础开始教起,零

安卓开源项目周报0322

由OpenDigg 出品的安卓开源项目周报第十三期来啦.我们的安卓开源周报集合了OpenDigg一周来新收录的优质的安卓开源项目,方便安卓开发人员便捷的找到自己需要的项目工具.Robust 新一代热更新系统Robust HoldingButton 控制录音状态的按钮 BlockCanaryEx 记录主线程中的方法及执行时间 fancyDialog Android自定义提示框 InstaCropper 仿Instagram图片裁剪 FancyShowCaseView 易于使用的自定义显示案例视图