先简要说明下Android支持的视频格式,如下: 由于硬件的不同,不同的手机支持的编解码方式有些不一样,在T-Mobile G1实际设备中增加了对WMA,WMV,H.264 AVC格式解码的支持。Android支持的音/视频编码方式仅包括:AMR-NB,H.263,输出的视频格式也只*.3gp或者*.mp4,这点在以后的开发中需要注意。 对Android的编解码有了一些了解后,我们再去研究下如何在Android上来播放/录制视频,打开Android SDK中关于媒体方面的说明,摘要其主要部分如下: 首先注意的就是:MediaPlayer,MediaRecoder,主要是用来播放视频与录制视频的类;由于这2个类都比较复杂,本篇在后面会详细介绍如何使用MediaRecoder,MediaPlayer将在以后篇幅中再详细介绍。 其他的几个类,定义Android支持的编码方式,如下:
如何使用MediaRecorder录制声音? 先对声音录制有个大致的了解,需要设置声音数据的来源、输出编码方式、输出文件路径、输出文件格式等。有一点需要说明的是:输出文件格式就相当于一个容器,具体采用什么编码需要指定编码格式。编码一样可能输出格式不一样,输出格式一样其编码方式可能不一样。 android.media 包含与媒体子系统交互的类。使用 android.media.MediaRecorder 类进行媒体采样,包括音频和视频。MediaRecorder 作为状态机运行。需要设置不同的参数,比如源设备和格式。设置后,可执行任何时间长度的录制,直到用户停止。 录制音频主要片段如下: MediaRecorder mrec ; File audiofile = null; private static final String TAG=”SoundRecordingDemo”; protected void startRecording() throws IOException { mrec.setAudioSource(MediaRecorder.AudioSource.MIC); mrec.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); if (mSampleFile == null) File sampleDir = Environment.getExternalStorageDirectory(); try audiofile = File.createTempFile(”ibm”, “.3gp”, sampleDir); }catch (IOException e) Log.e(TAG,”sdcard access error”); return; } mrec.setOutputFile(audiofile.getAbsolutePath()); mrec.prepare(); mrec.start(); protected void stopRecording() mrec.stop(); mrec.release(); processaudiofile(audiofile.getAbsolutePath()); protected void processAudiofile() ContentValues values = new ContentValues(3); long current = System.currentTimeMillis(); values.put(MediaStore.Audio.Media.TITLE, “audio” + audiofile.getName()); values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000)); values.put(MediaStore.Audio.Media.MIME_TYPE, “audio/3gpp”); values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath()); ContentResolver contentResolver = getContentResolver(); Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Uri newUri = contentResolver.insert(base, values); sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri)); 对以上代码解析如下:
|