nicks
nicks
  • 发布:2015-08-07 10:57
  • 更新:2018-05-17 10:46
  • 阅读:2820

请教官方!请教官方!!!关于视频录像文件尺寸的问题 ,我用java写了一段代码,调用原生录像,视频文件很小,但怎么把这段代码转为NJS代码?

分类:Native.js

package com.example.videotest;  

import java.io.File;  

import android.app.Activity;  
import android.hardware.Camera;  
import android.media.MediaRecorder;  
import android.media.MediaRecorder.AudioSource;  
import android.media.MediaRecorder.VideoSource;  
import android.os.Bundle;  
import android.os.Environment;  
import android.view.SurfaceHolder;  
import android.view.SurfaceHolder.Callback;  
import android.view.SurfaceView;  
import android.view.View;  

public class MainActivity extends Activity {  
    private SurfaceHolder mSurfaceHolder; // 画布的遥控器  
    private MediaRecorder mMediaRecorder; // 刻录机  
    private Camera mCamera; // 硬件  
    private SurfaceView mSurfaceView; // 画布(预览) 创建/改变/销毁  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview); // 获取画布的引用  
        mSurfaceHolder = mSurfaceView.getHolder(); // 只能遥控器才可以控制画布  
        mSurfaceHolder.addCallback(new CustomCallBack()); // 回调: 创建/改变/销毁  
        // mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
    }  

    /**  
     * 预览/停止控制  
     * @param view  
     */  
    public void stop(View view) {  
        mMediaRecorder.setPreviewDisplay(null); // release resouce  
        mMediaRecorder.stop();  
        mMediaRecorder.release();  
        freeCameraResource();  
    }  

    private class CustomCallBack implements Callback {  
        @Override  
        public void surfaceCreated(SurfaceHolder holder) {  
            initCamera();  
        }  

        @Override  
        public void surfaceChanged(SurfaceHolder holder, int format, int width,  
                int height) {  
        }  

        @Override  
        public void surfaceDestroyed(SurfaceHolder holder) {  
            if (mCamera != null) {  
                mCamera.setPreviewCallback(null);  
                mCamera.stopPreview();  
                mCamera.lock();  
                mCamera.release();  
                mCamera = null;  
            }  
        }  
    }  

    private void initCamera() {  
        if (mCamera != null) {  
            freeCameraResource();  
        }  
        try {  
            mCamera = Camera.open();  
            mCamera.setDisplayOrientation(90);  
            mCamera.setPreviewDisplay(mSurfaceHolder);  
            mCamera.startPreview();  
            mCamera.unlock();  
        } catch (Exception e) {  
            e.printStackTrace();  
            freeCameraResource();  
        }  
    }  

    private void freeCameraResource() {  
        if (mCamera != null) {  
            mCamera.setPreviewCallback(null);  
            mCamera.stopPreview();  
            mCamera.lock();  
            mCamera.release();  
            mCamera = null;  
        }  
    }  

    /**  
     * 刻录  
     *   
     */  

    public void start(View view) {  
        mMediaRecorder = new MediaRecorder();  
        mMediaRecorder.reset();  
        if (mCamera != null)  
            mMediaRecorder.setCamera(mCamera);  
        mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());  
        mMediaRecorder.setVideoSource(VideoSource.CAMERA);// 视频源  
        mMediaRecorder.setAudioSource(AudioSource.MIC);// 音频源  
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);// 视频输出格式  
        // mMediaRecorder.setVideoSize(mWidth, mHeight);// 设置分辨率:  
        mMediaRecorder.setVideoFrameRate(20);  
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);  
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
        mMediaRecorder.setVideoEncodingBitRate(512 * 1024);  
        mMediaRecorder.setOrientationHint(90);// 输出旋转90度,保持竖屏录制  
        mMediaRecorder.setMaxDuration(15000);// 最大期限  
        mMediaRecorder.setOutputFile(Environment.getExternalStorageDirectory()  
                + File.separator + "test.mp4");  
        try {  
            mMediaRecorder.prepare();  
            mMediaRecorder.start();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}
2015-08-07 10:57 负责人:无 分享
已邀请:
Android_磊子

Android_磊子

NJS是不能定义Activity的,需要注册到AndroidManifest.xml配置文件中,如果要注册到此就需要离线打包,既然离线打包了,使用插件方式实现就更好些了。

  • SSDNJ

    离线打包,能调用插件,来控制录制视频的分辨率,时间长短么?

    2018-02-24 17:52

  • Android_磊子

    回复 SSDNJ:是可以的,就如楼主代码。

    2018-02-26 10:36

nicks

nicks (作者)

源码已上传到附件

绝地求生

绝地求生

你的这个问题解决了吗??我现在也正在做这个,遇到问题了!!!

星陨

星陨 - 前端业余开发者

正需要,不知道现在解决了吗

该问题目前已经被锁定, 无法添加新回复