如何转换内置 Android 摄像头录制的视频的编解码器?
How to convert codec of video recorded by inbuilt Android camera?
我使用android的内置摄像头录制视频,但是当我通过Retrofit2发送到服务器时,在browser.So搜索了很长时间后看不到视频,我知道视频我用 android 录制,编解码器是 MP42
所以我需要将它转换成 H.264
编解码器才能在浏览器中播放。
这是我拍摄视频的方式
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();
}
}
我在 onActivityResult
中获取了视频的 uri,视频在 MP42
编解码器中,如何将其转换为 H.264
?
我尝试使用 MediaCodec Documentation,但我不知道在哪里输入我的 Uri
(mp42) 以获得 H.264 编解码器视频的输出(我想在浏览器中播放) .
有人请给我一些指导..
(1) 修复当前视频文件:
您的视频格式为 H.263(或 Mpeg-2),使用 Simple
配置文件。正如您所说,这意味着您必须转换。您必须使用一些免费的视频工具重新编码到 H.264 任务中。
例如:使用 Handbrake 你可以做...
选择打开您的 "not playing" MP4 文件。应该被检测为 MP4,现在勾选(或启用)选项 web optimized
.
在Video
设置选项卡中,选择编码器Profile
作为Main,选择编码器level
作为3.
在 Destination
中输入您的首选输出文件夹和文件名。
(只需浏览到某个文件夹,然后在此处输入您要创建的新文件名)。
单击绿色按钮 Start Encode
并在浏览器中测试新的 MP4 输出文件。
(2) 修复 Android 代码以供将来录制:
您必须在 MediaRecorder
对象设置中将编解码器设置为 H.264,例如:
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);
}
}
我使用android的内置摄像头录制视频,但是当我通过Retrofit2发送到服务器时,在browser.So搜索了很长时间后看不到视频,我知道视频我用 android 录制,编解码器是 MP42
所以我需要将它转换成 H.264
编解码器才能在浏览器中播放。
这是我拍摄视频的方式
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();
}
}
我在 onActivityResult
中获取了视频的 uri,视频在 MP42
编解码器中,如何将其转换为 H.264
?
我尝试使用 MediaCodec Documentation,但我不知道在哪里输入我的 Uri
(mp42) 以获得 H.264 编解码器视频的输出(我想在浏览器中播放) .
有人请给我一些指导..
(1) 修复当前视频文件:
您的视频格式为 H.263(或 Mpeg-2),使用 Simple
配置文件。正如您所说,这意味着您必须转换。您必须使用一些免费的视频工具重新编码到 H.264 任务中。
例如:使用 Handbrake 你可以做...
选择打开您的 "not playing" MP4 文件。应该被检测为 MP4,现在勾选(或启用)选项
web optimized
.在
Video
设置选项卡中,选择编码器Profile
作为Main,选择编码器level
作为3.在
Destination
中输入您的首选输出文件夹和文件名。
(只需浏览到某个文件夹,然后在此处输入您要创建的新文件名)。单击绿色按钮
Start Encode
并在浏览器中测试新的 MP4 输出文件。
(2) 修复 Android 代码以供将来录制:
您必须在 MediaRecorder
对象设置中将编解码器设置为 H.264,例如:
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);
}
}