关于android实时视频录制与上传

关于android的实时视频录制现在网上炒的很火,我想把自己学习研究的一个视频录制的demo 的心得与大家分享一下

 

使用的是MediaRecorder 以及使用SurfaceView进行录制的。

视频录制的部分也比较简单,直接看API的图就可以很清楚的知道步骤了。
Android的MediaRecorder包含了Audio和video的记录功能,在Android的界面上,Music和Video两个应用程序都是调用MediaRecorder实现的。
通过操作这个MediaRecorder类就能实现这个音频和视频的录制。


通过几个星期的努力做了一个基本成型的东西。可以录制视频并且可是实时的上传到服务器端。但是没有解决实时的问题,正在研究当中。但是在实时的上传的时候会遇到很多问题。

1.就是在保存本地的路径换成Socket android 的IPA可以支持可以用Socket 来传输

ParcelFileDescriptor pfd = ParcelFileDescriptor
        .fromSocket(receiver);
      mediaRecorder.setOutputFile(pfd.getFileDescriptor());

只要把参数换成Socket 就可以。

但是有个问题,可是实时的传到服务器上。有数据,但是就是不能播放。具体查了好多资料,知道什么原因,但是没有具体的解决方法,目前正在研究方法中。

1.具体不能播放的原因就是,在视频的录制的时候都有个数据回写功能。数据回写就是把视频一些标题数据信息,加载到录制的文件的开头,要是在录制视频没有这个标题头的话就不能播放视频,在本地录制的可以播放,但是用Socket 传输的话就是把那个信息数据加到文件的后面。导致文件开头没有信息无法播放,所以现在正在研究解决方法。

具体实时的上传的代码如下可以参考。

 

/**
  * 实时上传到PC端(边录边传)
  *
  * @author Administrator 吕俊
  */
 private final class ButtonClickListener1 implements View.OnClickListener
 {
  @Override
  public void onClick(View v)
  {
   if (!Environment.getExternalStorageState().equals(
     Environment.MEDIA_MOUNTED))
   {
    Toast.makeText(MainActivity.this, R.string.sdcarderror, 1)
      .show();
    return;
   }
   try
   {
    switch (v.getId())
    {
     case R.id.record:
      mediaRecorder.reset();

      mediaRecorder
        .setVideoSource(MediaRecorder.VideoSource.CAMERA); // 从照相机采集视频
      //mediaRecorder
        //.setAudioSource(MediaRecorder.AudioSource.MIC);
      mediaRecorder
        .setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
      mediaRecorder.setVideoSize(480, 320);
      mediaRecorder.setVideoFrameRate(3); // 每秒3帧
      mediaRecorder
        .setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); // 设置视频编码方式
      //mediaRecorder
      //  .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

      mediaRecorder.setPreviewDisplay(surfaceView.getHolder()
        .getSurface());

      // 实时上传的代码

       receiver = new Socket("192.168.1.149", 9999);
      ParcelFileDescriptor pfd = ParcelFileDescriptor
        .fromSocket(receiver);
      mediaRecorder.setOutputFile(pfd.getFileDescriptor());

      mediaRecorder.prepare();// 预期准备
      mediaRecorder.start();// 开始刻录

      record = true;
      break;

     case R.id.stop:
      if (record)
      {
       System.out.println(videoFile);
       mediaRecorder.stop();
       mediaRecorder.release();
       receiver.close();
       record = false;

      }
      break;
    }
   } catch (Exception e)
   {
    Toast.makeText(MainActivity.this, R.string.error, 1).show();
    Log.e(TAG, e.toString());
   }
  }

 }

 

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
Android设备上拍摄视频并上是相对简单的任务。首先,我们需要使用Android提供的摄像头API来访问设备上的摄像头。通过使用Camera或Camera2 API,我们可以打开设备上的摄像头,并在应用程序中预览和捕捉视频。 我们可以通过以下步骤来拍摄视频: 1. 创建一个相机实例并打开摄像头。 2. 创建一个预览界面,将摄像头预览显示在其中。 3. 创建一个媒体录制器(MediaRecorder)实例,用于捕获并保存视频数据。 4. 配置媒体录制器的参数,例如视频分辨率、帧率、编码格式等。 5. 准备录制器并开始录制视频。 6. 在适当的时间停止录制,并释放相机和媒体录制器资源。 一旦我们成功地拍摄了视频,接下来就是将其上到云存储或服务器。这一过程涉及数据输和网络连接。 我们可以通过以下步骤来上视频: 1. 创建一个网络连接,并确保具有正确的网络权限。 2. 将视频文件转换为字节流,以便输。 3. 将字节流发送到服务器或云存储。 4. 等待服务器响应来确认视频是否成功。 5. 处理上完成的视频文件,例如更新数据库、生成缩略图等。 当然,视频的过程可能因具体需求而有所变化。例如,可以进行网络连接的错误处理、上进度显示等。 总之,通过使用Android的摄像头API和网络连接API,我们可以方便地拍摄视频并将其上到服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值