Ejemplo n.º 1
0
        public void OnSurfaceTextureAvailable(SurfaceTexture surface, int width, int height)
        {
            {
                _surface = surface;
                {
                    int cameraCount = Android.Hardware.Camera.NumberOfCameras;
                    int cameraId    = 0;
                    Android.Hardware.Camera.CameraInfo cameraInfo = new Android.Hardware.Camera.CameraInfo();
                    for (int camIdx = 0; camIdx < cameraCount; camIdx++)
                    {
                        Android.Hardware.Camera.GetCameraInfo(camIdx, cameraInfo);
                        if (cameraInfo.Facing == Android.Hardware.CameraFacing.Front)
                        {
                            camera = Android.Hardware.Camera.Open(camIdx);

                            currentFacing = Android.Hardware.CameraFacing.Front;
                            cameraId      = camIdx;
                            break;
                        }
                    }

                    if (camera == null)
                    {
                        camera = Android.Hardware.Camera.Open();
                    }
                }


                var parameters = camera.GetParameters();
                var aspect     = ((decimal)height) / ((decimal)width);

                // Find the preview aspect ratio that is closest to the surface aspect
                //var previewSize = parameters.SupportedPreviewSizes
                //                            .OrderBy(s => Math.Abs(s.Width / (decimal)s.Height - aspect))
                //                            .First();

                var previewSize = parameters.SupportedPreviewSizes[2];
                //     mainLayout.LayoutParameters.Height = previewSize.Height;
                //     mainLayout.LayoutParameters.Width = previewSize.Width;

                parameters.SetPreviewSize(previewSize.Width, previewSize.Height);
                camera.SetParameters(parameters);
                camera.SetPreviewTexture(surface);
                StartCamera();

                //caemra page render
                Task.Run(() =>
                {
                    NetProcess.JpegStream.Clear();

                    DateTime chk = DateTime.Now;
                    while (isDestroy == false)
                    {
                        try
                        {
                            if (NetProcess.JpegStream.Count == 0)
                            {
                                continue;
                            }

                            if (chk < DateTime.Now)
                            {
                                exitButton.Text = "exit";

                                chk = DateTime.Now.AddSeconds(3);
                            }


                            MainThread.BeginInvokeOnMainThread(() =>
                            {
                                StreamWrapper ms;
                                while (NetProcess.JpegStream.TryDequeue(out ms) == true)
                                {
                                    if (ms == null)
                                    {
                                        continue;
                                    }

                                    var bitmap = BitmapFactory.DecodeByteArray(ms?.stream.ToArray(), 0, ms.stream.ToArray().Length);


                                    ImageView imageView;
                                    if (imageViewDic.TryGetValue(ms.pos, out imageView) == true)
                                    {
                                        imageView?.SetImageBitmap(bitmap);
                                    }
                                    else
                                    {
                                        AddImageView(ms.pos);

                                        if (imageViewDic.TryGetValue(ms.pos, out imageView) == true)
                                        {
                                            imageView?.SetImageBitmap(bitmap);
                                        }
                                    }


                                    //제일 하단 큰 스크린

                                    if (ms.pos == target_pos)
                                    {
                                        ImageView imageView2;
                                        if (imageViewDic.TryGetValue(6, out imageView2) == true)
                                        {
                                            imageView2?.SetImageBitmap(bitmap);
                                        }
                                        else
                                        {
                                            AddImageView(ms.pos);

                                            if (imageViewDic.TryGetValue(6, out imageView2) == true)
                                            {
                                                imageView2?.SetImageBitmap(bitmap);
                                            }
                                        }
                                    }
                                }
                            });
                        }
                        catch (Exception e)
                        {
                        }
                    }
                });


                //caemra page render
                Task.Run(() =>
                {
                    audiomgr?.record();
                });


                Task.Run(() =>
                {
                    while (isDestroy == false)
                    {
                        StreamWrapper ms;
                        if (NetProcess.AudioStream.TryDequeue(out ms) == true)
                        {
                            if (ms == null)
                            {
                                continue;
                            }

                            audiomgr?.play(ms.stream.ToArray());
                        }
                    }
                });
            }
        }
Ejemplo n.º 2
0
 public H263Stream(Android.Hardware.CameraFacing cameraId) : base(cameraId)
 {
     SetVideoEncoder(Android.Media.VideoEncoder.H263);
     this.packetizer = new H263Packetizer();
 }