基本信息
源码名称:android 视频采集
源码大小:0.05M
文件格式:.zip
开发语言:Java
更新时间:2015-11-05
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

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) {
			
		}
	}