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

本文将分享作者在Android平台使用MediaRecorder类进行实时视频录制,并通过Socket技术进行实时上传的经验。主要内容包括视频录制的基本流程、使用SurfaceView进行录制、通过Socket将录制的视频实时传输至服务器端的方法及面临的问题与解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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());
   }
  }

 }

 

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值