如何转换由内置的Android摄像头录制的视频编解码器?
问题描述:
我使用android的内置摄像头录制视频,但是当我通过Retrofit2发送到服务器时,视频无法在浏览器中看到。所以经过长时间的搜索后,我知道我用android录制的视频,编解码器是MP42
所以我需要将其转换为H.264
编解码器才能使其在浏览器中可以播放。如何转换由内置的Android摄像头录制的视频编解码器?
这里是我捕捉视频
private void recordVideo() {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFileUri();
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);
intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT,15);
startActivityForResult(intent, REQUEST_VIDEO_CAPTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == RECORD_VIDEO_PERMISSION && resultCode == RESULT_OK){
Uri uri =data.getData(); //so the video file I get it here
Log.d("videoData",data.getData().toString());
videoView.setVideoURI(uri);
videoView.start();
}
}
我得到的视频的URI中onActivityResult
,视频是在MP42
编解码器,我怎样才能将其转换为H.264
?
我试图使用MediaCodec Documentation,但我不知道在哪里输入我的Uri
(mp42)以获得H.264编解码器视频(我想在浏览器中播放)的输出。
有人请给我一些指导..
答
(1)修复当前的视频文件:
您的视频格式是H.263 (或MPEG-2)使用Simple
轮廓。正如你所说的,这意味着你必须转换。你必须这样做重新编码到H.264任务使用一些免费的视频工具。
例如:使用Handbrake你可以做...
选择打开你的“不玩” MP4文件。应该检测为MP4,现在勾选(或启用)选项
web optimized
。在
Video
设置标签,选择编码器Profile
为主和编码器level
为。在
Destination
把你的首选输出文件夹和文件名。
(只需浏览某个文件夹,然后在此处输入您要创建的新文件名)。点击绿色按钮
Start Encode
并在浏览器中测试新的MP4输出文件。
(2)固定Android的代码为未来录音:
你必须设置的编解码器H.264在MediaRecorder
对象设置,如:
myMediaRec = new MediaRecorder(); //create MediaRecorder object
myMediaRec.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //set video codec
所以基本上你代码应该如下所示:(未经测试的代码,仅用于学习或指导)...
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == RECORD_VIDEO_PERMISSION && resultCode == RESULT_OK)
{
//# Create a new instance of MediaRecorder
myMediaRec = new MediaRecorder(); //create MediaRecorder object
mMediaRec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRec.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
myMediaRec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//# Video settings
myMediaRec.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //contained inside MP4
myMediaRec.setVideoSize(640, 480); //width 640, height 480
myMediaRec.setVideoFrameRate(30); //30 FPS
myMediaRec.setVideoEncodingBitRate(3000000); //adjust this for picture quality
//# Audio settings
myMediaRec.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); //must always be AAC
myMediaRec.setAudioEncoder(MediaRecorder.getAudioSourceMax());
myMediaRec.setAudioEncodingBitRate(16);
myMediaRec.setAudioSamplingRate(44100);
}
}
MP42是一个容器(它也是一个MScodec,但无疑这是这里的情况) - 你可以分享一个链接到例如视频,我们或许能够帮助人们更好地 – Mick
这个视频是MP42我负责上传到服务器..只是看起来像这样 – ken
使用'MediaRecorder' API来捕捉视频。在设置代码期间,您可以选择H.264作为编解码器。 –