java中初始化MediaRecorder的实现方法

java中初始化MediaRecorder

实现代码:

private boolean initializeVideo() {
    Log.v(TAG, "initializeVideo");  

    if (mSurfaceHolder == null) {
      Log.v(TAG, "SurfaceHolder is null");
      return false;
    }  

    mMediaRecorderRecording = true;  

    if (mMediaRecorder == null)
        mMediaRecorder = new MediaRecorder();
    else
        mMediaRecorder.reset();
    if (mCamera != null) {
        if (Integer.parseInt(Build.VERSION.SDK) >= 8)
            VideoCameraNew2.reconnect(mCamera);
        mCamera.release();
        mCamera = null;
    }  

    if (useFront && Integer.parseInt(Build.VERSION.SDK) >= 5) {
            if (isAvailableSprintFFC)
            {
                try
                {
                    Method method = Class.forName("android.hardware.HtcFrontFacingCamera").getDeclaredMethod("getCamera", null);
                    mCamera = (Camera) method.invoke(null, null);
                }
                catch (Exception ex)
                {
                    Log.d(TAG, ex.toString());
                }
            } else {
                mCamera = Camera.open();
                Camera.Parameters parameters = mCamera.getParameters();
                parameters.set("camera-id", 2);
                mCamera.setParameters(parameters);
            }
            VideoCameraNew.unlock(mCamera);
            mMediaRecorder.setCamera(mCamera);
        mVideoPreview.setOnClickListener(this);
    }
    mVideoPreview.setOnLongClickListener(this);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mMediaRecorder.setOutputFile(sender.getFileDescriptor());  

        mMediaRecorder.setVideoFrameRate(20);
    if (videoQualityHigh) {
      mMediaRecorder.setVideoSize(352,288);
    } else {
      mMediaRecorder.setVideoSize(176,144);
    }
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
    mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());  

    try {
      mMediaRecorder.prepare();
      mMediaRecorder.setOnErrorListener(this);
      mMediaRecorder.start();
    } catch (IOException exception) {
      releaseMediaRecorder();
      finish();
      return false;
    }
    return true;
  }
private boolean initializeVideo() {
    Log.v(TAG, "initializeVideo"); 

    if (mSurfaceHolder == null) {
      Log.v(TAG, "SurfaceHolder is null");
      return false;
    } 

    mMediaRecorderRecording = true; 

    if (mMediaRecorder == null)
        mMediaRecorder = new MediaRecorder();
    else
        mMediaRecorder.reset();
    if (mCamera != null) {
        if (Integer.parseInt(Build.VERSION.SDK) >= 8)
            VideoCameraNew2.reconnect(mCamera);
        mCamera.release();
        mCamera = null;
    } 

    if (useFront && Integer.parseInt(Build.VERSION.SDK) >= 5) {
            if (isAvailableSprintFFC)
            {
                try
                {
                    Method method = Class.forName("android.hardware.HtcFrontFacingCamera").getDeclaredMethod("getCamera", null);
                    mCamera = (Camera) method.invoke(null, null);
                }
                catch (Exception ex)
                {
                    Log.d(TAG, ex.toString());
                }
            } else {
                mCamera = Camera.open();
                Camera.Parameters parameters = mCamera.getParameters();
                parameters.set("camera-id", 2);
                mCamera.setParameters(parameters);
            }
            VideoCameraNew.unlock(mCamera);
            mMediaRecorder.setCamera(mCamera);
        mVideoPreview.setOnClickListener(this);
    }
    mVideoPreview.setOnLongClickListener(this);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mMediaRecorder.setOutputFile(sender.getFileDescriptor()); 

        mMediaRecorder.setVideoFrameRate(20);
    if (videoQualityHigh) {
      mMediaRecorder.setVideoSize(352,288);
    } else {
      mMediaRecorder.setVideoSize(176,144);
    }
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
    mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 

    try {
      mMediaRecorder.prepare();
      mMediaRecorder.setOnErrorListener(this);
      mMediaRecorder.start();
    } catch (IOException exception) {
      releaseMediaRecorder();
      finish();
      return false;
    }
    return true;
  }
private void releaseMediaRecorder() {
    Log.v(TAG, "Releasing media recorder.");
    if (mMediaRecorder != null) {
      mMediaRecorder.reset();
      if (mCamera != null) {
            if (Integer.parseInt(Build.VERSION.SDK) >= 8)
                VideoCameraNew2.reconnect(mCamera);
            mCamera.release();
            mCamera = null;
      }
      mMediaRecorder.release();
      mMediaRecorder = null;
    }
  }  

  public void onError(MediaRecorder mr, int what, int extra) {
    if (what == MediaRecorder.MEDIA_RECORDER_ERROR_UNKNOWN) {
      finish();
    }
  }
private void releaseMediaRecorder() {
    Log.v(TAG, "Releasing media recorder.");
    if (mMediaRecorder != null) {
      mMediaRecorder.reset();
      if (mCamera != null) {
            if (Integer.parseInt(Build.VERSION.SDK) >= 8)
                VideoCameraNew2.reconnect(mCamera);
            mCamera.release();
            mCamera = null;
      }
      mMediaRecorder.release();
      mMediaRecorder = null;
    }
  } 

  public void onError(MediaRecorder mr, int what, int extra) {
    if (what == MediaRecorder.MEDIA_RECORDER_ERROR_UNKNOWN) {
      finish();
    }
  }
private void stopVideoRecording() {
    Log.v(TAG, "stopVideoRecording");
    if (mMediaRecorderRecording || mMediaRecorder != null) {
        Receiver.listener_video = null;
        t.interrupt();
      RtpStreamSender.delay = 0;  

      if (mMediaRecorderRecording && mMediaRecorder != null) {
        try {
          mMediaRecorder.setOnErrorListener(null);
          mMediaRecorder.setOnInfoListener(null);
          mMediaRecorder.stop();
        } catch (RuntimeException e) {
          Log.e(TAG, "stop fail: " + e.getMessage());
        }  

        mMediaRecorderRecording = false;
      }
      releaseMediaRecorder();
    }
  }

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Java编程子类能否重写父类的静态方法探索

    今天突然讨论到了子类继承父类的静态方法问题,有人坚持说能写,有人说不能重写,那到底能不能冲写呢?这个问题很简单,测试一下就完了. 先是父类代码: public class Fu { public static void show() { System.out.println("父类的静态方法"); } public void method() { System.out.println("父类的一般方法"); } } 下面是子类代码: public class Zi

  • Java编程将汉字转Unicode码代码示例

    上一次接触到编码的知识,还是上大学的时候,那时候学的是通信工程专业,有关编码的内容,不记得是在通信原理还是信息论与编码里面学到的了.却依然记得那个信息论与编码的老师,最喜欢吃的是尖椒肥肠盖饭,不知道是尖椒肥肠吃多了还是太聪明的缘故,三十多岁就开始拜顶了.那四年真是一段难忘的回忆... 话不多说,咱们进入正题.这里是一个简单的Java编程将汉字转Unicode码代码示例,下面是代码: package me.socketthread; public class ToUnicode { /** * @

  • Java编程Iterator迭代器设计原理及实现代码示例

    我们知道迭代器(Iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素.那么Iterator迭代器的设计原理是什么呢?迭代器问什么定义了一个借口,而不是一个类呢? 我们假设迭代器迭代数据的功能定义为了一个类,那么,会有这样的问题.不同的集合,由于数据结构不一样,所以他们的存储方式也是不一样的.也就是说,迭代器获取的时候,获取的方式是变化的,也就是不固定的.所以把这种方式定义为具体的实现是不合理的. 无论何种集合,他们肯定都有获取的功能,而且不知道什么时候就没有数据了.所有他

  • Java实现的3des加密解密工具类示例

    本文实例讲述了Java实现的3des加密解密工具类.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.poi.poifs.property.Child; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax

  • 基于JavaBean编辑器读取peroperties文件的实例

    引言 最近在重读<精通Spring+4.x++企业应用开发实战>这本书,看到了有关JavaBean编辑器的部分,了解到PropertyEditor和BeanInfo的使用.不得不说,BeanInfo是一个很强大的东西,Java中的内省也与之有一点点小关联. JavaBean.PropertyEditor与BeanInfo JavaBean简单介绍 JavaBean是一种Java写成的可重用组件,本质上还是一个Java类,但是与一般的Java类不同,JavaBean必须有一个无参的构造函数,其字

  • java中初始化MediaRecorder的实现方法

    java中初始化MediaRecorder 实现代码: private boolean initializeVideo() { Log.v(TAG, "initializeVideo"); if (mSurfaceHolder == null) { Log.v(TAG, "SurfaceHolder is null"); return false; } mMediaRecorderRecording = true; if (mMediaRecorder == nul

  • java中的可变参数使用方法

    java中的可变参数使用方法 可变参数时Java 1.5新增的方法,可变参数方法接收0个或者多个指定类型的参数,可变参数机制通过先创建一个数组,数组的大小为在调用位置所传递的参数数量,然后将参数值传到数组中,最后将数组传递给方法.如: public class Test{ public int sum(int... args) { int sum = 0; for (int arg : args) { sum += arg; } return sum; } } 可变参数提供了方便,但是使用可变参

  • Java中初始化块详解及实例代码

    Java中初始化块详解 在Java中,有两种初始化块:静态初始化块和非静态初始化块. 静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量,即static修饰的数据成员. 非静态初始化块:在每个对象生成时都会被执行一次,可以初始化类的实例变量. 非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被运行. 括号里的是初始化块,这里面的代码在创建Java对象时执行,而且在构造器之前执行! 其实初始化块就是构造器的补充,初始化块是

  • Java中对象数组的使用方法详解

    本文实例讲述了Java中对象数组的使用方法.分享给大家供大家参考,具体如下: 一 点睛 对象可以用数组来存放,通过下面两个步骤来实现. 1 声明以类为数据类型的数组变量,并用new分配内存空间给数组. 2 用new产生新的对象,并分配内存空间给它. 下面介绍4种方式来定义对象数组 方式一:静态方式 Person p1[] = { new Person(), new Person(), new Person() }; 方式二:动态初始化化 Person p2[]; p2 = new Person[

  • Java中构造器内部的多态方法的行为实例分析

    本文实例讲述了Java中构造器内部的多态方法的行为操作.分享给大家供大家参考,具体如下: 这篇文章主要讨论的是,若在一个构造器中调用正在构造的对象的某个动态绑定的方法时会出现的情况.在此之前,我们需要知道构造器是如何在复杂的层次结构中运作的,尽管构造方法并不具有多态性,因为它们实际上是static方法,只不过是隐式声明的static. 复杂层次结构中构造器的调用顺序 基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上链接,以使每个基类的构造器都能得到调用.这样做是因为,在Jav

  • Java中生成唯一ID的方法示例

    有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID. UUID 从Java 5开始, UUID 类提供了一种生成唯一ID的简单方法.UUID是通用唯一识别码 (Universally Unique Identifier)的缩写,UUID来源于OSF(Open Software Foundation,开源软件基金会)的DCE(Distributed Computing Environment,分布式计算环境)规范.UU

  • Java中使用Filter过滤器的方法

    Filter过滤器 着重记录下 public void doFilter(){} 方法参数: (1) ServletRequest servletRequest 请求reqeust: (2)ServletResponse servletResponse 响应response: (3)FilterChain filterChain 参数 filterChain,有一个doFilter() 方法,调用这个方法,可以使程序继续往下走,执行后续代码,如果有多个过滤器,它会继续执行下一个过滤器逻辑(开发中

  • java中的4种循环方法示例详情

    目录 java循环结构 1.while循环 2.do-while循环 3.for循环 4.java 增强for循环 java循环结构 顺序结构的程序语句只能 被执行一次.如果你要同样的操作执行多次,就需要使用循环结构. java中有三种主要的循环结构: while 循环 do...while 循环 for 循环 在java5中引入一种主要用于数组的增强型for循环. 1.while循环 while是最基本的循环,它的结构为: package com.example.lesson1; //whil

  • 详解处理Java中的大对象的方法

    目录 String中的substring 集合大对象扩容 保持合适的对象粒度 Bitmap 把对象变小 数据的冷热分离 数据双写 写入 MQ 分发 使用 Binlog 同步 思维发散 小结 本文我们将讲解一下对于“大对象”的优化.这里的“大对象”,是一个泛化概念,它可能存放在 JVM 中,也可能正在网络上传输,也可能存在于数据库中. 那么为什么大对象会影响我们的应用性能呢? 第一,大对象占用的资源多,垃圾回收器要花一部分精力去对它进行回收: 第二,大对象在不同的设备之间交换,会耗费网络流量,以及

  • Java中初始化List集合的八种方式汇总

    目录 1.常规方式 2.Arrays 工具类 3.Collections 工具类 4.Lists 工具类 5.匿名内部类 6.ImmutableList 7.Java8 Stream 8.Java9 List.of 总结 List 是在开发中比较常用的集合,今天总结一下 Java 中初始化 List 的几种方式. 1.常规方式 List<String> list = new ArrayList<>(); list.add("1"); list.add("

随机推荐