gpt4 book ai didi

android - android中的H264编码器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:30 25 4
gpt4 key购买 nike

我在尝试修复一个简单的视频录制应用时遇到了一些问题*。我想我正确地遵循了步骤顺序。以下是给我带来问题的代码部分的简化。一旦按下按钮,此代码仅作为回调执行:

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());
}
}

我在这里不明白的重要一点是,每当我将视频编码器设置为 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 自 honeycomb.那么它为什么要与 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)

*实际上,该应用程序比这要复杂一点,因为它也可以通过 LAN 传输视频,但我在这里关心的部分与此无关。您可以在这里查看这个有趣的项目:http://code.google.com/p/ipcamera-for-android/

最佳答案

如您所写,H.264 编码支持只能在运行 honeycomb 及更高版本的设备上实现,目前仅指平板电脑。如果您需要 H.264,您应该测试准备失败,或者告诉用户该设备不受支持,或者使用市场过滤器更好地阻止没有 H.264 的设备。或者你可以为 android 编译 ffmpeg - 就像其他几个项目一样。查看这些链接:

http://odroid.foros-phpbb.com/t338-ffmpeg-compiled-with-android-ndk

http://bambuser.com/opensource

FFmpeg on Android

关于android - android中的H264编码器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6645724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com