MediaRecoder实现预览画面

private SurfaceView surfaceView;
    private ImageButton imageButton;
    public int click_down=0,lose_up=0;
    public static final String TAG = "MainActivity";
    public SurfaceHolder mholder;
    private MediaRecorder mRecorder;
    public SurfaceHolder mSurfaceHolder;
    private boolean isStart = false;
    private File myRecAudioFile;
    private boolean mIsSufaceCreated = false;
    getTime time=new getTime();
    getSDCard path=new getSDCard();
    String path0 = path.getSDPath();
    private Camera camera;/


/实现预览功能

private void startPreview() {

        //保证只有一个Camera对象
        if (camera != null || !mIsSufaceCreated) {
            Log.d(TAG, "startPreview will return");
            return;
        }
        camera = Camera.open();
        Camera.Parameters parameters = camera.getParameters();
        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
        parameters.setPreviewFrameRate(20);
        //设置相机预览方向
        camera.setDisplayOrientation(90);
        camera.setParameters(parameters);
        try {
            camera.setPreviewDisplay(mSurfaceHolder);
        } catch (Exception e) {
            Log.d(TAG, e.getMessage());
        }


        camera.startPreview();
    }

//停止预览画面
    private void stopPreview() {
        //释放Camera对象
        if (camera != null) {
            try {
                camera.setPreviewDisplay(null);
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }
            camera.stopPreview();
            camera.release();
            camera = null;
        }
    }


}


实现Callback借口的方法

//界面创建时

public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        mIsSufaceCreated = true;
        mSurfaceHolder = holder;
        Log.d(TAG, "surfaceChanged 2");
    }

//界面销毁时
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        mIsSufaceCreated = false;
        if (isStart) {
                   mRecorder.stop();
                   mRecorder.release();
                   mRecorder = null;
              }
        stopPreview();//停止预览画面
    }
 //界面发生改变时

public void surfaceChanged(SurfaceHolder holder, int format, int width,
                               int height) {
        // TODO Auto-generated method stub
        startPreview();
        mSurfaceHolder = holder;
        Log.d(TAG, "surfaceChanged 1");


然后实现startRecording()和stopRecording()方法!
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将H.265转换为H.264,您需要使用编码器。以下是使用Java编写的示例代码,演示如何使用Xuggler库将H.265视频编码为H.264: ``` import java.awt.image.BufferedImage; import com.xuggle.mediatool.IMediaWriter; import com.xuggle.mediatool.ToolFactory; import com.xuggle.xuggler.ICodec; import com.xuggle.xuggler.IPixelFormat; import com.xuggle.xuggler.IVideoPicture; import com.xuggle.xuggler.IVideoResampler; public class H265toH264Converter { public static void main(String[] args) { String inputFile = "input.h265"; String outputFile = "output.h264"; // create a media reader IMediaReader mediaReader = ToolFactory.makeReader(inputFile); // create a media writer IMediaWriter mediaWriter = ToolFactory.makeWriter(outputFile, mediaReader); // configure the output codec mediaWriter.addVideoStream(0, 0, ICodec.ID.CODEC_ID_H264, 640, 480); // create a video resampler to resize the input video IVideoResampler resampler = null; if (mediaReader.getContainer().getStream(0).getStreamCoder().getPixelType() != IPixelFormat.Type.YUV420P) { resampler = IVideoResampler.make(640, 480, IPixelFormat.Type.YUV420P, mediaReader.getContainer().getStream(0).getStreamCoder().getWidth(), mediaReader.getContainer().getStream(0).getStreamCoder().getHeight(), mediaReader.getContainer().getStream(0).getStreamCoder().getPixelType()); } // read the input video and write the output video mediaReader.addListener(mediaWriter); while (mediaReader.readPacket() == null) { // get the next video frame BufferedImage image = mediaReader.readVideoFrame(); // resample the video frame if necessary if (resampler != null) { BufferedImage resizedImage = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); resizedImage.getGraphics().drawImage(image, 0, 0, 640, 480, null); image = resizedImage; } // convert the video frame to an xuggle IVideoPicture IVideoPicture picture = IVideoPicture.make( mediaWriter.getStream(0).getStreamCoder().getPixelType(), 640, 480); picture.getByteBuffer(0).put((byte[]) image.getData().getData()); // encode the video frame mediaWriter.encodeVideo(0, picture); } // flush the media writer mediaWriter.flush(); } } ``` 此代码使用Xuggler库读取H.265视频文件并将其转换为H.264。它还使用IVideoResampler来调整输入视频的大小,以适应H.264编码器的要求。然后,它将每个视频帧编码为H.264格式并将其写入输出文件。您需要将Xuggler库添加到类路径中,以便Java可以找到它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值