您的位置:首页 > 移动开发 > Android开发

关于android与Iphone录MP4格式视频播放问题

2015-04-01 09:40 375 查看
这几天遇到android录制MP4格式视频,到IPhone上播放不了的问题,经多方搜索没有找到问题所在,

最初android端使用的是 Mediarecoder 默认的简单设置,代码如下:

recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

recorder.setVideoSize(640, 480);

recorder.setVideoFrameRate(30);

recorder.setVideoEncodingBitRate(5 * 1024 * 1024);

recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

用此方法录制的视频没有任何问题,无论在其他任何设备上播放都没有问题,但是到了IPhone上就会无法播放(其他的苹果设备没有测试过),

最终IPhone的开发人员给了一个问题原因:

在iphone4 下不能播放avc level超过3.1的。把avc的编码的等级改成baseline L3.1 的或者改成high L3.1的录成的mp4文件都可以在iphone4 下播放

一开始,我的想法就是研究这个 avc 和 baseline@L3.1 代表的是什么,于是我就开始各种百度,博客转来转去,在一位大神的博客中找到了相关的说明
http://www.cnblogs.com/zyl910/archive/2011/12/08/h264_level.html
在这里我才有点了解到这个是 H.264 的编码中画质级别,大神是这么说的:对于H.264(MPEG-4 AVC)而言,级别(Level)是与档次(Profile)同等重要的参数。

于是我对自己的代码有进行了一番尝试,首先我更改胃不痛的编码格式,语音的编码格式,发现没有效果





如图所示(视频文件详细信息可以到PC播放器里查看文件属性看到),视频在IPhone上依然无法播放,于是我就在想怎样可以把这个 Format profile 的级别修改掉,

于是我又到 Mediarecoder 的源码中,API中翻看,发现了一个有趣的东西,CamcorderProfile profile ,对应之前大神的描述 profile (档次),于是我进到里面去看看,

发现Mediarecoder也是可以通过 profile 来进行设置的,在 CamcorderProfile 中也有对应的属性,于是我开始修改代码:

recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);

profile.videoFrameWidth = 640;

profile.videoFrameHeight = 480;

profile.fileFormat = MediaRecorder.OutputFormat.MPEG_4;

profile.videoCodec = MediaRecorder.VideoEncoder.H264;

profile.audioCodec = MediaRecorder.AudioEncoder.AMR_NB;

profile.videoFrameRate = 15;

recorder.setProfile(profile);

与之前直接对Mediarecoder进行设置对比,设置都是一样的,但是生成的 MP4 格式的视频可以在IPhone上播放了,

于是我又对profile.videoFrameWidth 和 profile.videoFrameHeight 按照之前大神博客中对应的画质级别进行了修改,生成了不同级别的视频



还有一个 Baseline@L3.0 的,这两个文件都是可以播放的,于是问题解决了。

总结:鄙人只是一个android不足一年的小白,第一次摸索着写博客,遇到这个问题怎么都没有找到准确的解决方案,android也有好多的东西我没接触过的,

虽然我解决了这个对大神来说的小问题,但是我对视频录制播放等等的方面了解还是很有限的,这只是一个参考的方法,因为网上找了很多地方没有,

所以分享出来给大家作参考。

真—总结:如果直接对Mediarecoder进行设置,画质的级别是修改不了的,但是对 CamcorderProfileprofile(档次?)进行设置的话,可以根据具体的设置,

自己就会对画质等级进行修改,更深层次的东西,小白我是在是不懂了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: