分享

android借助LocalSocket获取H264的几个疑点解惑(二)?

 arm_embed 2012-12-05

o.SCREEN_ORIENTATION_LANDSCAPE);

setContentView(R.layout.prew);

cameraSufView = (SurfaceView)this.findViewById(R.id.surfaceview);
SurfaceHolder holder = cameraSufView.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}


LocalSocket receiver,sender;
LocalServerSocket lss;

private void initLocalSocket(){
receiver = new LocalSocket();
try {
//address already in use
lss = new LocalServerSocket("mytest1");
receiver.connect(new LocalSocketAddress("mytest1"));
receiver.setReceiveBufferSize(500000);
receiver.setSendBufferSize(500000);

sender = lss.accept();
sender.setReceiveBufferSize(500000);
sender.setSendBufferSize(500000);
} catch (IOException e1) {
e1.printStackTrace();
Log.e("", "localSocket error:"+e1.getMessage());
}
}

protected void onResume() {
super.onResume();
}

protected void onStart() {
super.onStart();
}


private MediaRecorder mMediaRecorder ;
private Camera mCamera;

private FileOutputStream mOutput;

private void initializeVideo(){
if(mSurfaceHolder==null){
return ;
}
mMediaRecorderRecording = true;

if(mMediaRecorder==null)
mMediaRecorder = new MediaRecorder ();
else
mMediaRecorder.reset();

// if(mCamera!=null)
// {
// mCamera.release();
// mCamera = null;
// }

if(mOutput!=null)
{
try {
mOutput.close();
mOutput = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
mOutput = new FileOutputStream ("/sdcard/newdata.dat");
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}

// mCamera = Camera.open();
// Camera.Parameters parameters = mCamera.getParameters();
// parameters.setPreviewSize(176, 144);
// parameters.setPreviewFormat(PixelFormat.YCbCr_420_SP);
// mCamera.setParameters(parameters);
//
// mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

//文件句柄的方式
mMediaRecorder.setOutputFile(sender.getFileDescriptor());

// SDCard存储的方式
// try {
// mMediaRecorder.setOutputFile("/sdcard/langtao_264.data");
// } catch (IllegalStateException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }

mMediaRecorder.setVideoFrameRate(20);
mMediaRecorder.setVideoSize(176,144);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

try {
mMediaRecorder.prepare();
mMediaRecorder.start();

new Thread (this).start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
releaseMediaRecorder();
finish();
}
}

private void releaseMediaRecorder() {
Log.v("", "Releasing media recorder.");
if (mMediaRecorder != null) {
mMediaRecorder.reset();
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
mMediaRecorder.release();
mMediaRecorder = null;
}
}


private boolean mMediaRecorderRecording = false;

public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
initLocalSocket();
if(!mMediaRecorderRecording) initializeVideo();
}


private SurfaceHolder mSurfaceHolder ;

public void surfaceCreated(SurfaceHolder holder) {
mSurfaceHolder = holder ;
}

public void surfaceDestroyed(SurfaceHolder holder) {
mSurfaceHolder = null;
mMediaRecorderRecording = false;
releaseMediaRecorder();
}

public void run() {
int read = 0;
InputStream mInput=null;
try {
mInput = receiver.getInputStream();
} catch (IOException e1) {
e1.printStackTrace();
}
byte[] temp = new byte[10*1024];
while(read !=-1)
{
try {
read = mInput.read(temp);
Log.e("", "read:"+read);
mOutput.write(temp, 0, read);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
mOutput.close();
} catch (IOException e) {
e.printStackTrace();
}
if(sender!=null)
{
try {
sender.close();
receiver.close();
lss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

protected void onDestroy() {
super.onDestroy();
}

 

}



源码下载:
getH264FromMediaRecord.rar

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多