Bil*_*hon 10 android codec video-encoding h.264 video-recording
在尝试修复简单的视频录制应用程序*时,我遇到了一些问题.我想我正确地遵循了一系列步骤.以下是对我提出问题的代码部分的简化.按下按钮后,此代码仅作为回调执行:
if ( mRecorder != null){
mRecorder.reset();
mRecorder.release();
}
mRecorder = new MediaRecorder();
if(mViewer.hasSurface){
mRecorder.setPreviewDisplay(mViewer.holder.getSurface());
Log.d(TAG,"Surface has been set");
}
try {
Log.d(TAG,"Sleeping for 4000 mili");
Thread.sleep(4000);
Log.d(TAG,"Waking up");
} catch (InterruptedException e) {
Log.e(TAG,"InterruptedException");
e.printStackTrace();
}
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setVideoFrameRate(12);
mRecorder.setVideoSize(176, 144);
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setMaxDuration(MAX_DURATION_TEST);
String targetFile = "/sdcard/webcamera/temp.mp4";
File localFile = new File(targetFile);
if(localFile.exists()){
Log.d(TAG,"Local file exists");
}else{
Log.d(TAG,"Local file does not exist");
}
mRecorder.setOutputFile(targetFile);
try {
mRecorder.prepare();
bPrepared = true;
Log.i(TAG,"prepared");
return;
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
Log.e(TAG ,"IOException");
Log.e(TAG,"Message: "+e.getMessage());
StackTraceElement[] array = e.getStackTrace();
for(StackTraceElement element : array){
Log.e(TAG,""+element.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
这里我不明白的重要一点是,每当我将视频编码器设置为MPEG_4_S时,它就可以工作.另一方面,每当我将编码器设置为H264时,它就不会.问题是这段代码只是一个更大的项目的一部分,其余部分期望这个视频用h264编码.
我正在测试一台三星Galaxy I-7500,顺便说一句,是在froyo上运行的.我认为Galaxy I-9000也有同样的问题.
对我来说令人费解的是,根据这里的文档:http: //developer.android.com/guide/appendix/media-formats.html,完全不支持MPEG_4_SP编码,而蜂窝支持H264.那么为什么它与MPEG_4_SP一起使用呢?是否可以使其与H264一起使用?
我得到的错误并不是很清楚.
07-11 00:01:40.626: ERROR/MediaSource(1386): Message: prepare failed.
07-11 00:01:40.766: ERROR/MediaSource(1386): android.media.MediaRecorder._prepare(Native Method)
07-11 00:01:40.766: ERROR/MediaSource(1386): android.media.MediaRecorder.prepare(MediaRecorder.java:508)
07-11 00:01:40.766: ERROR/MediaSource(1386): com.appdh.webcamera.MediaSource.prepareOutput(MediaSource.java:74)
07-11 00:01:40.766: ERROR/MediaSource(1386): com.appdh.webcamera.MainActivity.startDetectCamera(MainActivity.java:312)
Run Code Online (Sandbox Code Playgroud)
*实际上,应用程序有点复杂,因为它也通过局域网传输视频,但我关注的部分与此无关.您可以在此处查看此项目:http://code.google.com/p/ipcamera-for-android/
正如您已经写过的那样,H.264编码支持只能用于运行蜂窝的设备以及之后的设备,目前仅指平板电脑.如果您需要H.264,则应测试准备失败,并告诉用户该设备不受支持,或使用市场过滤器更好地阻止没有H.264的设备.或者你可以为android编译ffmpeg - 就像其他几个项目一样.看看这些链接:
http://odroid.foros-phpbb.com/t338-ffmpeg-compiled-with-android-ndk
http://bambuser.com/opensource
| 归档时间: |
|
| 查看次数: |
17710 次 |
| 最近记录: |