New file |
| | |
| | | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | 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.Lechange.Opensdk.Api; |
| | | using Com.Lechange.Opensdk.Device; |
| | | using Com.Lechange.Opensdk.Listener; |
| | | using Com.Lechange.Opensdk.Media; |
| | | using HDL_ON.DAL.Server; |
| | | using HDL_ON_Android.LeChengView.Form; |
| | | using Java.Lang; |
| | | |
| | | namespace HDL_ON_Android |
| | | { |
| | | [Activity(Label = "LeChengVideoActivity", 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 LeChengVideoActivity : Activity, View.IOnClickListener |
| | | { |
| | | private static LeChengVideoActivity CurtActivity; |
| | | // |
| | | private string URL = "openapi.easy4ip.com:443"; |
| | | public string AccessToken = ""; |
| | | public string DeviceId = ""; |
| | | public string Psk = ""; |
| | | public string PlayToken = "";//播放playToken |
| | | public string CallId = "";//呼叫Id |
| | | private int Type = 0;//0监控,1对讲 |
| | | /// <summary> |
| | | /// 0:国内,1海外 |
| | | /// </summary> |
| | | private int Location = 0; |
| | | |
| | | private FrameLayout flWindow; |
| | | private FrameLayout flWindowContent; |
| | | private ImageView ivBack; |
| | | private TextView tvName; |
| | | private MonitorFragment monitorFragment = null; |
| | | private ReverseCallFragment reverseCallFragment = null; |
| | | |
| | | public LCOpenSDK_PlayWindow mPlayWindow; |
| | | |
| | | protected override void OnCreate(Bundle savedInstanceState) |
| | | { |
| | | base.OnCreate(savedInstanceState); |
| | | |
| | | SetContentView(Resource.Layout.activity_video_phone); |
| | | |
| | | CurtActivity = this; |
| | | AccessToken = Intent.GetStringExtra("AccessToken");//"St_0000d307a13c965c4db285469484490e" |
| | | DeviceId = Intent.GetStringExtra("DeviceId");//6K056CFAAJ8FFA1 |
| | | Psk = Intent.GetStringExtra("Psk");//6K056CFAAJ8FFA1 |
| | | PlayToken = Intent.GetStringExtra("PlayToken"); // 播放playToken//"8a5e041afa674a2ba3e84d90a54ea962" |
| | | Type = Intent.GetIntExtra("Type", 0);//0监控,1对讲//1 |
| | | Location = Intent.GetIntExtra("Location", 0);//1 |
| | | CallId = Intent.GetStringExtra("callId");//1384766990812426242 |
| | | |
| | | InitLCSDK(); |
| | | |
| | | IniView(); |
| | | |
| | | IniData(); |
| | | |
| | | Permissions(); |
| | | |
| | | if (Type == 0) |
| | | { |
| | | monitorFragment = new MonitorFragment(); |
| | | FragmentManager.BeginTransaction().Replace(Resource.Id.content, monitorFragment).Commit(); |
| | | } |
| | | else |
| | | { |
| | | reverseCallFragment = new ReverseCallFragment(); |
| | | FragmentManager.BeginTransaction().Replace(Resource.Id.content, reverseCallFragment).Commit(); |
| | | } |
| | | } |
| | | |
| | | private void IniView() |
| | | { |
| | | // |
| | | flWindowContent = (FrameLayout)FindViewById(Resource.Id.remoteFrame); |
| | | flWindow = (FrameLayout)FindViewById(Resource.Id.live_window); |
| | | |
| | | ivBack = (ImageView)FindViewById(Resource.Id.videoBackImg); |
| | | tvName = (TextView)FindViewById(Resource.Id.nameText); |
| | | |
| | | tvName.SetText("DeviceName", null); |
| | | ivBack.SetOnClickListener(this); |
| | | |
| | | } |
| | | |
| | | private void IniData() |
| | | { |
| | | // |
| | | //SetStatusBarColor();// 这里设计的TopBarColor是白色,与系统导航栏字体颜色一直,暂时屏蔽不用 |
| | | |
| | | mPlayWindow = new LCOpenSDK_PlayWindow(); |
| | | mPlayWindow.InitPlayWindow(this, flWindowContent, 0, true); |
| | | |
| | | if (Location == 1) |
| | | URL = "openapi.easy4ip.com:443"; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 初始化乐橙库 |
| | | /// </summary> |
| | | private void InitLCSDK() |
| | | { |
| | | InitParams initParams = new InitParams(this, URL, AccessToken); |
| | | LCOpenSDK_Api.InitOpenApi(initParams); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 开始播放(预览) |
| | | /// </summary> |
| | | public void Play() |
| | | { |
| | | try |
| | | { |
| | | LCOpenSDK_ParamReal paramReal = new LCOpenSDK_ParamReal(AccessToken, DeviceId, 0, Psk, PlayToken, 1, false, true); |
| | | mPlayWindow.PlayRtspReal(paramReal); |
| | | } |
| | | catch (System.Exception e) |
| | | { |
| | | string sss = e.Message; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 停止预览(停止播放画面) |
| | | /// </summary> |
| | | public void Stop() |
| | | { |
| | | mPlayWindow.StopRtspReal(true);//关闭视频 |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 打开对讲 |
| | | /// </summary> |
| | | public void StartTalk() |
| | | { |
| | | CloseAudio();// 关闭Audio |
| | | LCOpenSDK_Talk.Listener = new AudioTalkerListener();//设置对讲监听 |
| | | // 对讲参数 |
| | | LCOpenSDK_ParamTalk paramTalk = new LCOpenSDK_ParamTalk(AccessToken, DeviceId, -1, Psk, PlayToken, true); |
| | | LCOpenSDK_Talk.PlayTalk(paramTalk); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 关闭对讲 |
| | | /// </summary> |
| | | public void StopTalk() |
| | | { |
| | | LCOpenSDK_Talk.StopTalk(); |
| | | LCOpenSDK_Talk.Listener = null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 打开声音(预览的时候可以听到门口机传来的声音) |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public bool OpenAudio() |
| | | { |
| | | return mPlayWindow.PlayAudio() == 0; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 关闭声音(预览的时候关闭门口挤传来的声音,注意:打开对讲时需要先调用此方法关闭声音) |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public bool CloseAudio() |
| | | { |
| | | return mPlayWindow.StopAudio() == 0; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置顶部状态栏背景透明 |
| | | /// </summary> |
| | | private void SetStatusBarColor() |
| | | { |
| | | Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds); |
| | | Window.SetStatusBarColor(Color.Transparent); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 必要的一些权限 |
| | | /// </summary> |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 点击事件 |
| | | /// </summary> |
| | | /// <param name="v"></param> |
| | | public void OnClick(View v) |
| | | { |
| | | if (v.Equals(ivBack)) |
| | | { |
| | | this.Finish(); |
| | | } |
| | | } |
| | | |
| | | protected override void OnDestroy() |
| | | { |
| | | base.OnDestroy(); |
| | | |
| | | Stop(); |
| | | mPlayWindow.UninitPlayWindow();//销毁底层资源 |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 对讲监听 |
| | | /// </summary> |
| | | class AudioTalkerListener : LCOpenSDK_TalkerListener |
| | | { |
| | | /// <summary> |
| | | /// 对讲结果回调 |
| | | /// </summary> |
| | | /// <param name="error"></param> |
| | | /// <param name="type"></param> |
| | | public override void OnTalkResult(string error, int type) |
| | | { |
| | | base.OnTalkResult(error, type); |
| | | |
| | | try |
| | | { |
| | | bool talkResult = false; |
| | | if (type == 99 || error.Equals("-1000") || error.Equals("0") || error.Equals("1") || error.Equals("3")) |
| | | { |
| | | talkResult = false; |
| | | } |
| | | else if (error.Equals("4")) |
| | | { |
| | | talkResult = true; |
| | | } |
| | | |
| | | if (!talkResult) |
| | | { |
| | | // 提示对讲打开失败 |
| | | CurtActivity.StopTalk(); |
| | | CurtActivity.RunOnUiThread(() => |
| | | { |
| | | Toast.MakeText(CurtActivity, Resource.String.talk_open_failed, ToastLength.Short).Show(); |
| | | }); |
| | | } |
| | | else |
| | | { |
| | | CurtActivity.reverseCallFragment.PostAnswer();// post接听电话,给云端做记录 |
| | | CurtActivity.reverseCallFragment.TimeStarts();//接通成功打开计时器 |
| | | } |
| | | } |
| | | catch { } |
| | | } |
| | | |
| | | public override void OnTalkPlayReady() |
| | | { |
| | | base.OnTalkPlayReady(); |
| | | } |
| | | |
| | | public override void OnAudioReceive(byte[] bytes, int p1, int p2, int p3, int p4) |
| | | { |
| | | base.OnAudioReceive(bytes, p1, p2, p3, p4); |
| | | } |
| | | |
| | | public override void OnAudioRecord(byte[] bytes, int p1, int p2, int p3, int p4) |
| | | { |
| | | base.OnAudioRecord(bytes, p1, p2, p3, p4); |
| | | } |
| | | |
| | | public override void OnDataLength(int i) |
| | | { |
| | | base.OnDataLength(i); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |