在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 视频采集

android 视频采集

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:0.05M
  • 下载次数:24
  • 浏览次数:605
  • 发布时间:2015-11-05
  • 实例类别:Android平台开发
  • 发 布 人:tulip
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 采集 Android 视频 d

实例介绍

【实例简介】

【实例截图】

【核心代码】

package com.wjf;

import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.media.MediaRecorder;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

	public class VedioTestActivity extends Activity implements Callback 
	{
		LocalServerSocket mAudioLocalServerSocket = null;
		LocalSocket mAudioLocalClientSocket = null;
		LocalSocket mAudioReceiveSocket = null;
		
		LocalServerSocket mVideoLocalServerSocket = null;
		LocalSocket mVideoLocalClientSocket = null;
		LocalSocket mVideoReceiveSocket = null;

		protected LocalListenThread mAudioListenThread = null;
		protected LocalListenThread mVideoListenThread = null;

		protected MediaRecorder mVideoRecorder = null;
		protected MediaRecorder mAudioRecorder = null;
		protected SurfaceView mSurfaceView = null;
		Button mStart = null;

		/** Called when the activity is first created. */
		@Override
		public void onCreate(Bundle savedInstanceState) 
		{
			super.onCreate(savedInstanceState);
			setContentView(R.layout.main);
			mSurfaceView = (SurfaceView)this.findViewById(R.id.surface_camera);
			mSurfaceView.getHolder().addCallback(this);
	        mSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
	        
			mStart = (Button)findViewById(R.id.dlg_capture_btn_control);
			mStart.setOnClickListener(new ClickEvents());
		}

		class ClickEvents implements OnClickListener 
		 {
			 @Override
			public void onClick(View v) 
			{
				if(v == mStart)
				{
					StartRecording();
			  	}
			}
		}
		
		void StartRecording()
		{
		    if(mAudioListenThread == null)
		    {
		    	mAudioReceiveSocket = new LocalSocket();
				try
				{
					mAudioLocalServerSocket = new LocalServerSocket("Audio");
					mAudioReceiveSocket.connect(new LocalSocketAddress("Audio"));
					mAudioReceiveSocket.setReceiveBufferSize(500000);
					mAudioReceiveSocket.setSendBufferSize(500000);
					mAudioLocalClientSocket = mAudioLocalServerSocket.accept();
					mAudioLocalClientSocket.setReceiveBufferSize(500000);
					mAudioLocalClientSocket.setSendBufferSize(500000);
					mAudioListenThread = new LocalListenThread(true);  
				    mAudioListenThread.start();
				}
				catch(IOException e)
				{
					
				}
		       
		    }
		    
		    if(mVideoListenThread == null)
		    {   
		    	mVideoReceiveSocket = new LocalSocket();
				try
				{
					mVideoLocalServerSocket = new LocalServerSocket("Video");
					mVideoReceiveSocket.connect(new LocalSocketAddress("Video"));
					mVideoReceiveSocket.setReceiveBufferSize(500000);
					mVideoReceiveSocket.setSendBufferSize(500000);
					mVideoLocalClientSocket = mVideoLocalServerSocket.accept();
					mVideoLocalClientSocket.setReceiveBufferSize(500000);
					mVideoLocalClientSocket.setSendBufferSize(500000);
					mVideoListenThread = new LocalListenThread(false);  
					mVideoListenThread.start();
				}
				catch(IOException e)
				{
					
				}
		    } 
		
		    try
		    {
		  
		       if(mVideoRecorder == null)
		       { 
			       mVideoRecorder = new MediaRecorder();
			       mVideoRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
			       mVideoRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);    
			       mVideoRecorder.setVideoFrameRate(15);
			       mVideoRecorder.setVideoSize(320, 240);
			       mVideoRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
			       mVideoRecorder.setPreviewDisplay(mSurfaceView.getHolder().getSurface());
			       mVideoRecorder.setOutputFile(mVideoLocalClientSocket.getFileDescriptor());
			       mVideoRecorder.prepare();
		       }
		          
		    
			    if(mAudioRecorder == null)
			    {
			       mAudioRecorder = new MediaRecorder();
			       mAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
			       mAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
			       mAudioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
			       mAudioRecorder.setOutputFile(mAudioLocalClientSocket.getFileDescriptor());
			       mAudioRecorder.prepare();
			    }
			    if(mVideoRecorder != null)
			    {
			       mVideoRecorder.start();
			    }
			    if(mAudioRecorder != null)
			    {
			       mAudioRecorder.start();
			    } 
		    }
		    catch(Exception localException)
		    { 
		    	Log.e("OnStartRecording", localException.toString());
		    }
		}
		
		class LocalListenThread extends Thread 
		{
			private boolean mStop = false;
			private final boolean mAudioType;

			LocalListenThread(boolean bAudioType)
			{
				mAudioType = bAudioType;
				mStop = false;
			}

			public boolean IsStop() 
			{
				return mStop;
			}

			public void run() 
			{
				InputStream clientInputStream = null;
				
				int maxBufferSize = 0;
				int readBytes = 0;
				byte[] readBuffer = null;

				if (mAudioType == true) 
				{
					maxBufferSize = 10 * 1024;
					try 
					{
						clientInputStream = mAudioReceiveSocket.getInputStream();
					} 
					catch (IOException e) 
					{
						e.printStackTrace();
					}
				} else 
				{
					maxBufferSize = 200 * 1024;
					try 
					{
						clientInputStream = mVideoReceiveSocket.getInputStream();
					} 
					catch (IOException e) 
					{
						e.printStackTrace();
					}
				}
				readBuffer = new byte[maxBufferSize];

				while (mStop == false) 
				{
					try 
					{
						readBytes = clientInputStream.read(readBuffer, 0,maxBufferSize);
					} 
					catch (IOException e) 
					{
						continue;
					}
					if (readBytes <= 0)
						continue;
					if (mAudioType == true) 
					{
						Log.i("Audio", String.format("len %d", readBytes));
					}
					else
					{
						Log.i("Video", String.format("len %d", readBytes));
					}
				}

				mStop = true;
			}
		}

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

		@Override
		public void surfaceCreated(SurfaceHolder holder) {
			
		}

		@Override
		public void surfaceDestroyed(SurfaceHolder holder) {
			
		}

		public void invalidateDrawable(Drawable arg0) {
			
		}

		public void scheduleDrawable(Drawable who, Runnable what, long when) {
			
		}

		public void unscheduleDrawable(Drawable who, Runnable what) {
			
		}
	}

标签: 采集 Android 视频 d

实例下载地址

android 视频采集

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 jeeary 发表于: 2016-04-17 01:01 49
学习下

支持(0) 盖楼(回复)

第 2 楼 Vanyang 发表于: 2019-09-24 21:28 30
android版本高的手机打不开

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有2条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警