From 61df8ac3d298742b9023ae9e5258b2bb97099a94 Mon Sep 17 00:00:00 2001
From: wxr <wxr@hdlchina.com.cn>
Date: 星期一, 18 十一月 2024 17:09:49 +0800
Subject: [PATCH] 海康对接

---
 HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java |  227 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 217 insertions(+), 10 deletions(-)

diff --git a/HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java b/HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java
index efd4222..eb92a3a 100644
--- a/HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java
+++ b/HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java
@@ -4,6 +4,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
 import android.os.Build;
 import android.os.IBinder;
 import android.util.Log;
@@ -23,11 +25,17 @@
 import org.linphone.core.Address;
 import org.linphone.core.AudioDevice;
 import org.linphone.core.AuthInfo;
+import org.linphone.core.Buffer;
 import org.linphone.core.Call;
 import org.linphone.core.CallParams;
+import org.linphone.core.ChatMessage;
+import org.linphone.core.ChatMessageListener;
+import org.linphone.core.ChatRoom;
+import org.linphone.core.Content;
 import org.linphone.core.Core;
 import org.linphone.core.CoreException;
 import org.linphone.core.Factory;
+import org.linphone.core.ParticipantImdnState;
 import org.linphone.core.ProxyConfig;
 import org.linphone.core.TransportType;
 
@@ -67,13 +75,91 @@
     private volatile static HDLLinphoneKit instance;
     private Context viewContext;
     private ServiceWaitThread mServiceWaitThread;
-    private String mUsername, mPassword, mServerIP;
+    private String mUsername, mPassword, mServerIP,mTransportType;
     //    private TextureView mRenderingView, mPreviewView;
     private boolean isAutoJumpCallView;//鏄惁鑷姩璺宠浆鍛煎彨椤甸潰
     private String intercomeType;
 
+    /**
+     * 閾冨0鎾斁鍣�
+     */
+    private MediaPlayer mediaPlayer;
+
+    /**
+     * 鏈帴浜嬩欢瑙﹀彂鏃堕棿
+     */
+    public int missedCallsTime = 30;
+
+    public AudioManager audioManager;
+
+
     private HDLLinphoneKit() {
 
+    }
+
+    private void InitMediaPlayer(Context context) {
+        if (mediaPlayer == null) {
+            try {
+                mediaPlayer = MediaPlayer.create(context, R.raw.oldphone_mono);
+            } catch (Exception ex) {
+
+            }
+        }
+    }
+
+    private void initAudioManager(Context context){
+        if(audioManager == null){
+            try{
+                audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+            }catch (Exception exception){
+
+            }
+        }
+    }
+
+    public int getRingerMode()
+    {
+        return audioManager.getRingerMode();
+    }
+
+    public boolean getMediaPlayerPlayingStatus(){
+        if (mediaPlayer != null){
+            return mediaPlayer.isPlaying();
+        }
+        return false;
+    }
+
+
+    // 鎾斁閾冨0
+    public void playRingtone() {
+        if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
+            mediaPlayer.start(); // 寮�濮嬫挱鏀�
+        }
+    }
+
+    /**
+     * 鏄惁寰幆鎾斁閾冨0
+     * @param isLooping
+     */
+    public void setMediaPlayerLooping(boolean isLooping) {
+        mediaPlayer.setLooping(isLooping);
+    }
+
+    // 鍋滄閾冨0
+    public void stopRingtone() {
+        if (mediaPlayer != null && mediaPlayer.isPlaying()) {
+            mediaPlayer.stop(); // 鍋滄鎾斁
+//            mediaPlayer.reset(); // 閲嶇疆 MediaPlayer
+//            mediaPlayer.release(); // 閲婃斁璧勬簮
+//            mediaPlayer = null;
+        }
+    }
+
+    public void releaseRingtone(){
+        if (mediaPlayer != null ) {
+            mediaPlayer.release(); // 閲婃斁璧勬簮
+            mediaPlayer = null;
+        }
     }
 
     /**
@@ -106,6 +192,8 @@
         }
     }
 
+
+
     /**
      * 鍒濆鍖朙inphone
      *
@@ -115,6 +203,8 @@
         viewContext = context.getApplicationContext();
         if (!HDLLinphoneService.isReady()) {
             CheckIfNeedstartService();
+            InitMediaPlayer(context);
+            initAudioManager(context);
         } else {
         }
     }
@@ -271,6 +361,16 @@
         mPassword = password;
         mServerIP = serverIP;
         intercomeType = inter_type;
+        mTransportType = "UDP";
+        login(inter_type);
+    }
+
+    public void setAccountAndLogin(String username, String password, String serverIP, String inter_type, String transportType) {
+        mUsername = username;
+        mPassword = password;
+        mServerIP = serverIP;
+        mTransportType = transportType;
+        intercomeType = inter_type;
         login(inter_type);
     }
 
@@ -384,10 +484,10 @@
             }
             if (inter_type.equals(INTER_PHONE_TYPE_FREEVIEW)) {
                 // 鍏ㄨ閫氬彲瑙嗗璁叉敞鍐�
-                freeViewRegisterUserAuth(mUsername, mPassword, mServerIP);
+                freeViewRegisterUserAuth(mUsername, mPassword, mServerIP,mTransportType);
             } else {
                 // 鍏朵粬鍙瀵硅娉ㄥ唽
-                registerUserAuth(mUsername, mPassword, mServerIP);
+                registerUserAuth(mUsername, mPassword, mServerIP,mTransportType);
             }
         } catch (CoreException e) {
             e.printStackTrace();
@@ -402,7 +502,7 @@
      * @param host
      * @throws CoreException
      */
-    public void registerUserAuth(String name, String password, String host) throws CoreException {
+    public void registerUserAuth(String name, String password, String host,String transportType) throws CoreException {
         Core mLinphoneCore = HDLLinphoneService.getCore();
         if (mLinphoneCore == null) return;
 
@@ -411,7 +511,20 @@
         mAccountCreator.setUsername(name);
         mAccountCreator.setDomain(host);
         mAccountCreator.setPassword(password);
-        mAccountCreator.setTransport(TransportType.Udp);
+        switch (transportType.toUpperCase()){
+            case "UDP":
+                mAccountCreator.setTransport(TransportType.Udp);
+                Log.i("linphone", "setting : TransportType.Udp");
+                break;
+            case "TCP":
+                mAccountCreator.setTransport(TransportType.Tcp);
+                Log.i("linphone", "setting : TransportType.Tcp");
+                break;
+            default:
+                mAccountCreator.setTransport(TransportType.Udp);
+                Log.i("linphone", "default : TransportType.Udp");
+                break;
+        }
         ProxyConfig prxCfg = mAccountCreator.createProxyConfig();
 
         prxCfg.enableQualityReporting(false);
@@ -421,14 +534,90 @@
         mLinphoneCore.addProxyConfig(prxCfg);//娣诲姞浠g悊閰嶇疆銆傚鏋滃惎鐢ㄤ簡娉ㄥ唽锛岃繖灏嗗紑濮嬪湪浠g悊涓婃敞鍐屻��
         mLinphoneCore.addAuthInfo(authInfo);//娣诲姞璁よ瘉淇℃伅鍒�,璇ヤ俊鎭墖娈靛皢鍦ㄦ墍鏈夐渶瑕佺殑SIP浜嬪姟涓娇鐢ㄨ韩浠介獙璇�
         mLinphoneCore.setDefaultProxyConfig(prxCfg);//璁剧疆榛樿浠g悊銆�
+
     }
+
+    public void sendSipMessage(String sipAddress, String message) {
+        try {
+            Core mLinphoneCore = HDLLinphoneService.getCore();
+            if (mLinphoneCore == null) {
+                Log.e("Linphone", "Linphone Core 鏈垵濮嬪寲");
+                return;
+            }
+
+            // 瑙f瀽瀵规柟鐨凷IP鍦板潃
+            Address address = mLinphoneCore.interpretUrl(sipAddress);
+
+            // 寤虹珛瀵硅瘽
+            ChatRoom chatRoom = mLinphoneCore.getChatRoom(address);
+
+            // 鍒涘缓娑堟伅
+            ChatMessage chatMessage = chatRoom.createMessageFromUtf8(message);
+
+            // 鐩戝惉娑堟伅鐘舵��
+            chatMessage.addListener(new ChatMessageListener() {
+                @Override
+                public void onFileTransferSendChunk(ChatMessage message, Content content, int offset, int size, Buffer buffer) {
+                    // 鏂囦欢浼犺緭鐨勫垎鍧楀彂閫佸洖璋冿紝鏈娇鐢�
+                }
+
+                @Override
+                public void onMsgStateChanged(ChatMessage message, ChatMessage.State state) {
+                    Log.d("Linphone", "娑堟伅鐘舵�佹洿鏂帮細" + state.toString());
+                    if (state == ChatMessage.State.Delivered) {
+                        Log.d("Linphone", "娑堟伅宸叉垚鍔熷彂閫�");
+                    } else if (state == ChatMessage.State.NotDelivered) {
+                        Log.d("Linphone", "娑堟伅鍙戦�佸け璐�");
+                    }
+                }
+
+                @Override
+                public Buffer onFileTransferSend(ChatMessage message, Content content, int offset, int size) {
+                    return null;  // 鏂囦欢浼犺緭鍥炶皟锛屾湭浣跨敤
+                }
+
+                @Override
+                public void onEphemeralMessageDeleted(ChatMessage message) {
+                    // 涓存椂娑堟伅鍒犻櫎鍥炶皟锛屾湭浣跨敤
+                }
+
+                @Override
+                public void onEphemeralMessageTimerStarted(ChatMessage message) {
+                    // 涓存椂娑堟伅璁℃椂鍣ㄥ紑濮嬪洖璋冿紝鏈娇鐢�
+                }
+
+                @Override
+                public void onParticipantImdnStateChanged(ChatMessage message, ParticipantImdnState state) {
+                    // 鍙備笌鑰呮秷鎭�氱煡鐘舵�佹敼鍙樺洖璋冿紝鏈娇鐢�
+                }
+
+                @Override
+                public void onFileTransferRecv(ChatMessage message, Content content, Buffer buffer) {
+                    // 鏂囦欢浼犺緭鎺ユ敹鍥炶皟锛屾湭浣跨敤
+                }
+
+                @Override
+                public void onFileTransferProgressIndication(ChatMessage message, Content content, int offset, int total) {
+                    // 鏂囦欢浼犺緭杩涘害鍥炶皟锛屾湭浣跨敤
+                }
+            });
+            // 鍙戦�佹秷鎭�
+            chatMessage.send();
+
+        } catch (Exception e) {
+            Log.e("Linphone", "娑堟伅鍙戦�佸け璐�", e);
+            e.printStackTrace();
+        }
+    }
+
+
 
     /**
      * 鎻愪氦璐﹀彿鍜屽瘑鐮佹敞鍐屽埌鍏ㄨ閫氭湇鍔″櫒
      *
      * @throws CoreException
      */
-    public void freeViewRegisterUserAuth(String userName, String password, String domain) throws CoreException {
+    public void freeViewRegisterUserAuth(String userName, String password, String domain,String transportType) throws CoreException {
         Core mLinphoneCore = HDLLinphoneService.getCore();
         if (mLinphoneCore == null) return;
 
@@ -438,7 +627,21 @@
         mAccountCreator.setUsername(userName);
         mAccountCreator.setDomain("yun");
         mAccountCreator.setPassword(password);
-        mAccountCreator.setTransport(TransportType.Udp);
+
+        switch (transportType.toUpperCase()){
+            case "UDP":
+                mAccountCreator.setTransport(TransportType.Udp);
+                Log.i("linphone", "setting : TransportType.Udp");
+                break;
+            case "TCP":
+                mAccountCreator.setTransport(TransportType.Tcp);
+                Log.i("linphone", "setting : TransportType.Tcp");
+                break;
+            default:
+                mAccountCreator.setTransport(TransportType.Udp);
+                Log.i("linphone", "default : TransportType.Udp");
+                break;
+        }
 
         ProxyConfig prxCfg = mAccountCreator.createProxyConfig();
         prxCfg.enableQualityReporting(false);
@@ -479,10 +682,14 @@
             if (addressToCall != null) {
                 call = core.inviteAddressWithParams(addressToCall, params);
                 // 璁剧疆澶栨斁
-                for (AudioDevice audioDevice : HDLLinphoneService.getCore().getAudioDevices()) {
-                    if (audioDevice.getType() == AudioDevice.Type.Speaker) {
-                        call.setOutputAudioDevice(audioDevice);
+                try {
+                    for (AudioDevice audioDevice : HDLLinphoneService.getCore().getAudioDevices()) {
+                        if (audioDevice.getType() == AudioDevice.Type.Speaker) {
+                            call.setOutputAudioDevice(audioDevice);
+                        }
                     }
+                }catch (Exception exception){
+                    Log.e("LinphoneError",exception.getMessage());
                 }
             }
         }

--
Gitblit v1.8.0