//using System; //using System.Collections.Generic; //using System.Threading; //using Android; //using Android.App; //using Android.Content; //using Android.Content.PM; //using Android.Graphics; //using Android.OS; //using Android.Runtime; //using Android.Support.V4.App; //using Android.Support.V4.Content; //using Android.Util; //using Android.Views; //using Android.Widget; //using Com.ETouchSky; //using Com.Tool; //using GateWay.Droid.FengLinVideo.widget; //using HDL_ON.Common; //using HDL_ON.DAL.Server; //using HDL_ON_Android.FengLinVideo.Form; //namespace HDL_ON_Android //{ // [Activity(Label = "VideoActivity", WindowSoftInputMode = SoftInput.AdjustResize, LaunchMode = LaunchMode.SingleInstance, ConfigurationChanges = (ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.LayoutDirection | ConfigChanges.Locale | ConfigChanges.Orientation | ConfigChanges.ScreenSize), Theme = "@style/MyTheme1", ScreenOrientation = ScreenOrientation.Portrait)] // public class VideoActivity : Activity, View.IOnClickListener, ISurfaceHolderCallback, VideoPhoneJni.ICallBack, TipDiaglog.OnConfirmClickListener // { // private static Activity activity; // private VideoPhone mPhone; // private ISurfaceHolder mRemoteSurfaceHolder; // private FrameLayout mRemoteFrameContainer; // private SurfaceView mSurfaceRemote; // private ImageView ivBack; // private TextView tvName; // private MonitorFragment monitorFragment = null; // private ReverseCallFragment reverseCallFragment = null; // public static string ESVideoUUID = "JJY000019VPLLF";//室外机UUID,例:JJY000007FSEYX f5f6fa // public static string DeviceName;//室外机的名称,例,室外机 // public static bool IsCollect;//是否收藏 // public static int Tpye = 0;//类型,0 监控,1反呼 // public static string UUId; // public static string CallId;//callId 呼叫记录id // public static string CmtID;//cmtID 丰林社区号 // public static string Roomno;//roomno 丰林房间号 // public static string Unitno;//unitno 丰林楼栋号 string // public static string HomeID;//HomeID 丰林住宅id // protected override void OnCreate(Bundle savedInstanceState) // { // base.OnCreate(savedInstanceState); // try // { // activity = this; // ESVideoUUID = Intent.GetStringExtra("ESVideoUUID");//室外机UUID,例:JJY000007FSEYX // DeviceName = Intent.GetStringExtra("DeviceName");//室外机的名称,例,室外机 // UUId = Intent.GetStringExtra("uuid");// // CallId = Intent.GetStringExtra("callId"); // CmtID = Intent.GetStringExtra("cmtID"); // Roomno = Intent.GetStringExtra("roomno"); // Unitno = Intent.GetStringExtra("unitno"); // HomeID = Intent.GetStringExtra("HomeID"); // IsCollect = Intent.GetBooleanExtra("IsCollect", false);//是否收藏 // Tpye = Intent.GetIntExtra("Type", 0);//类型,0 监控,1反呼 // SetContentView(Resource.Layout.activity_video_phone); // IniView(); // IniData(); // if (Tpye == 0) // { // Monitor(ESVideoUUID); //监控 // monitorFragment = new MonitorFragment(mPhone); // FragmentManager.BeginTransaction().Replace(Resource.Id.content, monitorFragment).Commit(); // } // else // { // string param = "address=" + ESVideoUUID + ",tag=mobile://123,"; // reverseCallFragment = new ReverseCallFragment(mPhone, param); // FragmentManager.BeginTransaction().Replace(Resource.Id.content, reverseCallFragment).Commit(); // } // } // catch {} // } // /// // /// 必要的一些权限 // /// // private void Permissions() // { // string[] mPermissionList = new string[] // { // Manifest.Permission.WriteExternalStorage, // Manifest.Permission.ReadExternalStorage, // Manifest.Permission.Camera, // Manifest.Permission.RecordAudio // }; // foreach (string permissions in mPermissionList) // { // if (ContextCompat.CheckSelfPermission(this, permissions) != 0) // { // ActivityCompat.RequestPermissions(this, new string[] { permissions }, 1); // } // } // } // /// // /// 隐藏底部导航栏——虚拟按键 // /// // private void HideVirtualButtons() // { // WindowManagerLayoutParams windowManager = Window.Attributes; // var uiOptions = (int)Window.DecorView.SystemUiVisibility; // var newUiOptions = (int)uiOptions; // newUiOptions = (int)SystemUiFlags.HideNavigation | (int)SystemUiFlags.Immersive | (int)SystemUiFlags.ImmersiveSticky; // windowManager.SystemUiVisibility = (StatusBarVisibility)newUiOptions; // Window.Attributes = windowManager; // } // /// // /// 监控 // /// // /// // private void Monitor(string address) // { // //监视功能 从平台拉取监视列表,调用此接口可以一台一台监视 // if (mPhone != null) // { // //此参数 可以向门口机设备传递数据, // //注意:RequestAudio 请求对方音频,RequestVideo请求对方视频 SendAudio发送本地音频 SendVideo 发送本地视频 一般门口不接收到视频,所以最好设置0,减少流量消耗 // string UserData = ""; // string param = "SendAudio=0\r\n" + "SendVideo=0\r\n" + "RequestAudio=0\r\n" + "RequestVideo=0\r\n" + "UserData=" + UserData + "\r\n"; // mPhone.Monitor(address, param); // } // } // private void IniView() // { // mRemoteFrameContainer = (FrameLayout)FindViewById(Resource.Id.remoteFrame); // ivBack = (ImageView)FindViewById(Resource.Id.videoBackImg); // tvName = (TextView)FindViewById(Resource.Id.nameText); // tvName.SetText(DeviceName, null); // ivBack.SetOnClickListener(this); // } // private void IniData() // { // try // { // if (mPhone == null) // { // string _params = "port=8554\r\n" + "packcode=1021df37c2abe546a4541ca2c4a9c910\r\n"; //初始化对讲端口,默认就好,跟门口机设置要匹配,注意新接口需要增加packcode参数,需要把你们的包名发过来 // mPhone = new VideoPhone(this, this, _params); // if (mRemoteSurfaceHolder != null) // { // mPhone.SetRemoteSurfaceHolder(mRemoteSurfaceHolder, "mRemoteSurfaceHolder!=null"); //设置来电窗口 // } // ViewGroup v = (ViewGroup)FindViewById(Resource.Id.locaVideo); // mPhone.SetLocalVideoContainer(v);//设置本地视频窗口,一定要调用,不然后会出现没声音 // } // else // { // mPhone.StopStream(); // mPhone.Release(); // mPhone = null; // } // } // catch { } // } // protected override void OnResume() // { // base.OnResume(); // HideVirtualButtons(); // Permissions(); // if (mPhone != null) // { // mPhone.OnActivityResume(); // } // } // protected override void OnPause() // { // base.OnPause(); // if (mPhone != null) // { // //mPhone.OnActivityPause(); // } // } // protected override void OnDestroy() // { // base.OnDestroy(); // if (mPhone != null) // { // mPhone.HangUp(); // mPhone.Release(); // mPhone = null; // //mPhone.OnActivityDestroy(); // } // if (ReverseCallFragment.unlockThread != null) // { // try // { // // // ReverseCallFragment.unlockThread.Interrupt(); // } // catch { } // ReverseCallFragment.unlockThread = null; // } // if (MonitorFragment.thread != null) // { // try // { // // // MonitorFragment.thread.Interrupt(); // } // catch { } // MonitorFragment.thread = null; // } // } // public override void OnBackPressed() // { // if (mPhone != null) // mPhone.HangUp(); // Finish(); // } // public void OnClick(View v) // { // if (v.Equals(ivBack)) // { // if (mPhone != null) // mPhone.HangUp(); // Finish(); // } // } // /// // /// show出视频画面 // /// 不能用View.INVISIBLE来完全隐藏,否则MediaCodec.configure会报ava.lang.IllegalArgumentException: The surface has been released // /// // private void ShowRemoteVideo() // { // try // { // if (mSurfaceRemote != null) // { // return; // } // mSurfaceRemote = new SurfaceView(this, null); // ISurfaceHolder holder = mSurfaceRemote.Holder; // holder.AddCallback(this);//ISurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS // holder.SetType(SurfaceType.PushBuffers); // //发现第一次show时会闪屏一下,后面hide再show时不会闪屏 // FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent); // //v.setId(View.generateViewId()); // mSurfaceRemote.LayoutParameters = lp; // mRemoteFrameContainer.AddView(mSurfaceRemote); // } // catch { } // } // /// // /// 关闭画面 // /// // private void HideRemoteVideo() // { // try // { // if (mSurfaceRemote != null) // { // mRemoteFrameContainer.RemoveView(mSurfaceRemote); // mSurfaceRemote = null; // } // } // catch { } // } // /// // /// 弹出已挂断提示 // /// // private void ShowTipDialog(string title, string text, string btnText, bool isClose) // { // try // { // TipDiaglog diaglog = new TipDiaglog(this); // diaglog.SetAutoClose(isClose); // diaglog.SetTitleText(title);//"提示" // diaglog.SetContentText(text);//"已挂断" // diaglog.SetConfirmText(btnText);//"确认" // diaglog.SetCanceledOnTouchOutside(false); // diaglog.Show(); // diaglog.Create(); // diaglog.SetConfirmClickListener(this); // } // catch (Exception e) // { // string ss = e.Message; // } // } // public void SurfaceChanged(ISurfaceHolder holder, [GeneratedEnum] Format format, int width, int height) // { // mRemoteSurfaceHolder = holder; // if (mPhone != null) // { // mPhone.SetRemoteSurfaceHolder(holder, "surfaceChanged"); // } // } // public void SurfaceCreated(ISurfaceHolder holder) // { // mRemoteSurfaceHolder = holder; // if (mPhone != null) // { // mPhone.SetRemoteSurfaceHolder(holder, "surfaceCreated"); // } // } // public void SurfaceDestroyed(ISurfaceHolder holder) // { // mRemoteSurfaceHolder = null; // if (mPhone != null) // { // mPhone.SetRemoteSurfaceHolder(null, "surfaceDestroyed"); // } // } // /// // /// 开始拉流 // /// 注意:由于android框架限制,要满足如下条件才能开流:activity要在前台,并且surfaceview可用 // /// // /// // private void StartStream(String reason) // { // if (mPhone != null) // { // try // { // //开流之前可配置视频尺寸,码率,帧率 针对的是本地 // //mPhone.SetVideoSize(640, 480);//1920x1080,1280x720,640x480 // //mPhone.SetBps(1.5 * 1024 * 1024); // //mPhone.SetFps(30); // mPhone.StartStream(); // } // catch { } // } // } // /// // /// 通话状态回调方法 // /// // /// // public void OnPhoneEvent(string msg) // { // try // { // if (monitorFragment != null) // { // monitorFragment.OnPhoneEvent(msg); // } // if (reverseCallFragment != null) // { // reverseCallFragment.OnPhoneEvent(msg); // } // TextProtocol tp = new TextProtocol(); // tp.Parse(msg); // string event1 = tp.GetString("event"); // Log.Info("FengLinVideo", "OnPhoneEvent event=" + event1); // switch (event1) // { // case "EVT_Ringing": // mPhone.RequestCallerSendVideo(); // ShowRemoteVideo(); // break; // case "EVT_Connected": // if (!mPhone.IsStreamRunning) // { // //由于android框架限制,要满足如下条件才能开流: activity要在前台,并且surfaceview可用 // StartStream("EVT_Connected"); // } // ShowRemoteVideo(); // break; // case "EVT_StartStream": // StartStream("EVT_StreamStream"); // break; // case "EVT_StopStream": // mPhone.StopStream(); // break; // case "EVT_MonitorConnected": // if (!mPhone.IsStreamRunning) // { // StartStream("EVT_MonitorConnected"); // } // ShowRemoteVideo(); // break; // case "EVT_HangUp": // HideRemoteVideo(); // if (mPhone != null) // { // mPhone.StopStream(); // } // //Toast.MakeText(this, GetString(Resource.String.end_call), ToastLength.Short).Show(); // this.Finish(); // //ShowTipDialog(tip, hang_up, confirm, true); // break; // case "EVT_RECV_CUSTOM_DATA": // string data = tp.GetString("data"); // Toast.MakeText(this, GetString(Resource.String.video_success), ToastLength.Short).Show(); // break; // case "EVT_SnapAck": // int error = tp.GetInt("error"); // string filePath = tp.GetString("filePath"); // if (error == 0) // { // Toast.MakeText(this, GetString(Resource.String.video_success), ToastLength.Short).Show(); // } // else // { // Toast.MakeText(this, GetString(Resource.String.video_fail), ToastLength.Short).Show(); // } // break; // } // } // catch { } // } // public void OnRecvAudioFrame(byte[] p0) // { // //throw new NotImplementedException(); // } // public void OnRecvVideoFrame(byte[] p0) // { // //throw new NotImplementedException(); // } // public void onSureClick(TipDiaglog dialoog, View v, bool bol) // { // dialoog.Dismiss(); // if (bol) // this.Finish(); // } // } //}