android 使用javacv进行录像[模仿vine]
来源:互联网 发布:网络克隆安装windows7 编辑:程序博客网 时间:2024/06/11 23:07
http://blog.csdn.net/wodong/article/details/20772045
相关代码如下:
1. 初始化 ffmpeg_recorder
- public void initRecorder() {
- String ffmpeg_link = parentPath + "/" + "video.mp4";
- Log.w(LOG_TAG, "init recorder");
- if (yuvIplimage == null) {
- yuvIplimage = IplImage.create(cameraManager.getDefaultSize().width,
- cameraManager.getDefaultSize().height, IPL_DEPTH_8U, 2);
- Log.i(LOG_TAG, "create yuvIplimage");
- }
- Log.i(LOG_TAG, "ffmpeg_url: " + ffmpeg_link);
- recorder = new FFmpegFrameRecorder(ffmpeg_link,
- cameraManager.getDefaultSize().width,
- cameraManager.getDefaultSize().height, 1);
- recorder.setFormat("mp4");
- recorder.setSampleRate(sampleAudioRateInHz);
- // Set in the surface changed method
- recorder.setFrameRate(frameRate);
- Log.i(LOG_TAG, "recorder initialize success");
- audioRecordRunnable = new AudioRecordRunnable();
- audioThread = new Thread(audioRecordRunnable);
- try {
- recorder.start();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- audioThread.start();
- }
2. 捕捉摄像头视频数据:
- public void onPreviewFrame(byte[] data, Camera camera) {
- int during = checkIfMax(new Date().getTime());
- /* get video data */
- if (yuvIplimage != null && isStart) {
- yuvIplimage.getByteBuffer().put(data);
- //yuvIplimage = rotateImage(yuvIplimage.asCvMat(), 90).asIplImage();
- Log.v(LOG_TAG, "Writing Frame");
- try {
- System.out.println(System.currentTimeMillis() - videoStartTime);
- if (during < 6000) {
- recorder.setTimestamp(1000 * during);
- recorder.record(yuvIplimage);
- }
- } catch (FFmpegFrameRecorder.Exception e) {
- Log.v(LOG_TAG, e.getMessage());
- e.printStackTrace();
- }
- }
- }
3. 捕捉声音数据:
- class AudioRecordRunnable implements Runnable {
- @Override
- public void run() {
- android.os.Process
- .setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
- // Audio
- int bufferSize;
- short[] audioData;
- int bufferReadResult;
- bufferSize = AudioRecord.getMinBufferSize(sampleAudioRateInHz,
- AudioFormat.CHANNEL_CONFIGURATION_MONO,
- AudioFormat.ENCODING_PCM_16BIT);
- audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
- sampleAudioRateInHz,
- AudioFormat.CHANNEL_CONFIGURATION_MONO,
- AudioFormat.ENCODING_PCM_16BIT, bufferSize);
- audioData = new short[bufferSize];
- Log.d(LOG_TAG, "audioRecord.startRecording()");
- audioRecord.startRecording();
- /* ffmpeg_audio encoding loop */
- while (!isFinished) {
- // Log.v(LOG_TAG,"recording? " + recording);
- bufferReadResult = audioRecord.read(audioData, 0,
- audioData.length);
- if (bufferReadResult > 0) {
- // Log.v(LOG_TAG, "bufferReadResult: " + bufferReadResult);
- // If "recording" isn't true when start this thread, it
- // never get's set according to this if statement...!!!
- // Why? Good question...
- if (isStart) {
- try {
- Buffer[] barray = new Buffer[1];
- barray[0] = ShortBuffer.wrap(audioData, 0,
- bufferReadResult);
- recorder.record(barray);
- // Log.v(LOG_TAG,"recording " + 1024*i + " to " +
- // 1024*i+1024);
- } catch (FFmpegFrameRecorder.Exception e) {
- Log.v(LOG_TAG, e.getMessage());
- e.printStackTrace();
- }
- }
- }
- }
- Log.v(LOG_TAG, "AudioThread Finished, release audioRecord");
- /* encoding finish, release recorder */
- if (audioRecord != null) {
- audioRecord.stop();
- audioRecord.release();
- audioRecord = null;
- Log.v(LOG_TAG, "audioRecord released");
- }
- }
- }
源码:
http://download.csdn.net/detail/wodong/7008905
0 0
- android 使用javacv进行录像[模仿vine]
- android 使用javacv进行录像[模仿vine]
- android 录像 各种 尝试 问题 javacv
- 用Bitblaze进行程序分析之三------VINE的使用
- 模仿vine实现android视频的可间断录制和播放[basic]
- 模仿vine实现android视频的可间断录制和播放[basic]
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android使用MediaRecorder录像
- 【问题解决】Android使用Javacv加载分类器
- 操作系统标识宏
- 【python学习,重启csdn博客】渐行渐远,回眸依然,CSDN,涛声依旧
- MySql级联删除和更新
- 贪心——防空
- CAShapeLayer和CAGradientLayer
- android 使用javacv进行录像[模仿vine]
- 哈希表的实现(取余法)
- HTTP协议详解
- POJ1753
- 更改tomcat的server.xml 访问非工程目录下的文件(其他磁盘下的文件)
- ganglia metric 默认监控项翻译
- TOMCAT使用HTTPS
- python图片数组格式转化
- CABasicAnimation fillMode和removedOnCompletion