Skip to content

Commit b024e7d

Browse files
author
v_yholu
committed
Feature: 新增原生 VoIP 小程序可呼叫设备
1 parent 3492a32 commit b024e7d

File tree

8 files changed

+430
-49
lines changed

8 files changed

+430
-49
lines changed
-2.76 MB
Binary file not shown.

app/src/main/java/com/example/ivdemo/CustomDuplexVideoActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,7 @@ class CustomDuplexVideoActivity : BaseIPCActivity<ActivityCustomDuplexVideoBindi
341341
bgSurfaceView.visibility = View.VISIBLE
342342
surfaceViewDuplex.visibility = View.VISIBLE
343343
surfaceViewDuplex.bringToFront()
344+
llHangUp.bringToFront()
344345
bgTextureView.visibility = View.VISIBLE
345346
textureViewDuplex.visibility = View.VISIBLE
346347
textureViewDuplex.bringToFront()

app/src/main/java/com/example/ivdemo/TweCallActivity.kt

Lines changed: 269 additions & 21 deletions
Large diffs are not rendered by default.

app/src/main/java/com/tencent/iotvideo/link/CameraRecorder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,13 +264,13 @@ public void onVideoEncoded(byte[] datas, long pts, long seq, boolean isKeyFrame)
264264
int buf_size = iv.getSendStreamBuf(visitor, channel, res_type);
265265
Log.e(TAG, "sendVideoData to visitor " + visitor + " failed: " + ret + " buf size " + buf_size);
266266
} else {
267-
Log.e(TAG, "sendVideoData to success");
267+
// Log.e(TAG, "sendVideoData to success");
268268
}
269269

270270
if ((stat_cnt++ % 50) == 0) {
271271
int buf_size = iv.getSendStreamBuf(visitor, channel, res_type);
272272
IvP2pSendInfo ivP2pSendInfo = iv.getSendStreamStatus(visitor, channel, res_type);
273-
Log.d(TAG, "visitor " + visitor + " buf size " + buf_size + " link mode " + ivP2pSendInfo.getLinkMode() + " instNetRate:" + ivP2pSendInfo.getInstNetRate() + " aveSentRate:" + ivP2pSendInfo.getAveSentRate() + " sumSentAcked:" + ivP2pSendInfo.getSumSentAcked());
273+
// Log.d(TAG, "visitor " + visitor + " buf size " + buf_size + " link mode " + ivP2pSendInfo.getLinkMode() + " instNetRate:" + ivP2pSendInfo.getInstNetRate() + " aveSentRate:" + ivP2pSendInfo.getAveSentRate() + " sumSentAcked:" + ivP2pSendInfo.getSumSentAcked());
274274
}
275275
}
276276
saveH264(datas);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.tencent.iotvideo.link.consts;
2+
3+
public class CallState {
4+
// 无通话状态
5+
public static final int IDLE = 0;
6+
// 呼叫中
7+
public static final int IS_CALLING = 1;
8+
// 来电中
9+
public static final int INCOMING_CALL = 2;
10+
// 通话中
11+
public static final int ON_CALL = 3;
12+
}

app/src/main/res/layout/activity_twe_call.xml

Lines changed: 69 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,13 @@
146146

147147
<TextView
148148
android:id="@+id/tv_tips"
149-
android:layout_width="match_parent"
150-
android:layout_height="60dp"
149+
android:layout_width="wrap_content"
150+
android:layout_height="wrap_content"
151151
android:layout_marginTop="10dp"
152152
android:visibility="gone"
153-
app:layout_constraintLeft_toLeftOf="parent"
154-
app:layout_constraintRight_toRightOf="parent"
153+
android:gravity="center"
154+
app:layout_constraintStart_toStartOf="parent"
155+
app:layout_constraintEnd_toEndOf="parent"
155156
app:layout_constraintTop_toTopOf="parent" />
156157

157158
<ImageView
@@ -165,13 +166,26 @@
165166
app:layout_constraintStart_toStartOf="parent"
166167
app:layout_constraintTop_toBottomOf="@id/title_layout" />
167168

169+
<TextView
170+
android:id="@+id/tv_be_call_status"
171+
android:layout_width="wrap_content"
172+
android:layout_height="wrap_content"
173+
android:textSize="24sp"
174+
android:textStyle="bold"
175+
android:text="@string/wx_voip_incoming_call"
176+
android:visibility="gone"
177+
app:layout_constraintStart_toStartOf="@id/surfaceView_twe_call_bg"
178+
app:layout_constraintEnd_toEndOf="@id/surfaceView_twe_call_bg"
179+
app:layout_constraintTop_toTopOf="@id/surfaceView_twe_call_bg"
180+
app:layout_constraintBottom_toBottomOf="@id/surfaceView_twe_call_bg" />
181+
168182
<View
169183
android:id="@+id/surfaceView_twe_call_bg"
170184
android:layout_width="match_parent"
171185
android:layout_height="600dp"
172186
android:layout_marginHorizontal="10dp"
173187
android:layout_marginTop="20dp"
174-
android:background="@color/black"
188+
android:background="@color/black_4D000000"
175189
android:gravity="center"
176190
android:visibility="gone"
177191
app:layout_constraintTop_toBottomOf="@+id/text_dev_info" />
@@ -208,32 +222,61 @@
208222
app:layout_constraintEnd_toEndOf="parent"
209223
app:layout_constraintTop_toBottomOf="@+id/text_dev_info" />
210224

211-
<LinearLayout
212-
android:id="@+id/ll_twe_call_hang_up"
225+
<!-- region answer & hangup button -->
226+
<TextView
227+
android:id="@+id/btn_twe_call_answer"
213228
android:layout_width="wrap_content"
214229
android:layout_height="wrap_content"
215-
android:layout_marginBottom="16dp"
216-
android:gravity="center_horizontal"
217-
android:orientation="vertical"
218230
android:visibility="gone"
231+
android:layout_marginBottom="16dp"
232+
android:padding="8dp"
233+
android:gravity="center"
234+
android:text="@string/twe_call_answer"
235+
android:textSize="16sp"
236+
android:textColor="@color/white"
237+
android:textStyle="bold"
238+
android:drawablePadding="4dp"
239+
app:drawableTopCompat="@mipmap/icon_answer"
219240
app:layout_constraintBottom_toBottomOf="parent"
220-
app:layout_constraintLeft_toLeftOf="parent"
221-
app:layout_constraintRight_toRightOf="parent">
241+
app:layout_constraintEnd_toStartOf="@id/btn_twe_call_busy"
242+
app:layout_constraintStart_toStartOf="parent" />
222243

223-
<ImageView
224-
android:layout_width="wrap_content"
225-
android:layout_height="wrap_content"
226-
android:src="@mipmap/icon_hang_up" />
244+
<TextView
245+
android:id="@+id/btn_twe_call_busy"
246+
android:layout_width="wrap_content"
247+
android:layout_height="wrap_content"
248+
android:visibility="gone"
249+
android:layout_marginBottom="16dp"
250+
android:padding="8dp"
251+
android:gravity="center"
252+
android:text="@string/twe_call_busy"
253+
android:textSize="16sp"
254+
android:textColor="@color/white"
255+
android:textStyle="bold"
256+
android:drawablePadding="4dp"
257+
app:drawableTopCompat="@mipmap/icon_hang_up"
258+
app:layout_constraintBottom_toBottomOf="parent"
259+
app:layout_constraintStart_toEndOf="@id/btn_twe_call_answer"
260+
app:layout_constraintEnd_toStartOf="@id/btn_twe_call_hang_up"
261+
app:layout_constraintEnd_toEndOf="parent" />
227262

228-
<TextView
229-
android:id="@+id/btn_twe_call_hang_up"
230-
android:layout_width="wrap_content"
231-
android:layout_height="wrap_content"
232-
android:layout_marginTop="4dp"
233-
android:gravity="center"
234-
android:text="@string/twe_call_hangup"
235-
android:textSize="16sp"
236-
android:textStyle="bold" />
237-
</LinearLayout>
263+
<TextView
264+
android:id="@+id/btn_twe_call_hang_up"
265+
android:layout_width="wrap_content"
266+
android:layout_height="wrap_content"
267+
android:visibility="gone"
268+
android:layout_marginBottom="16dp"
269+
android:padding="8dp"
270+
android:gravity="center"
271+
android:text="@string/twe_call_hangup"
272+
android:textSize="16sp"
273+
android:textColor="@color/white"
274+
android:textStyle="bold"
275+
android:drawablePadding="4dp"
276+
app:drawableTopCompat="@mipmap/icon_hang_up"
277+
app:layout_constraintBottom_toBottomOf="parent"
278+
app:layout_constraintStart_toEndOf="@id/btn_twe_call_busy"
279+
app:layout_constraintEnd_toEndOf="parent" />
280+
<!-- endregion answer & hangup button -->
238281
</androidx.constraintlayout.widget.ConstraintLayout>
239282
</ScrollView>

app/src/main/res/values/strings.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@
3030
<string name="twe_call_video_call">视频通话</string>
3131
<string name="twe_call_audio_call">音频通话</string>
3232
<string name="twe_call_hangup">挂断</string>
33+
<string name="twe_call_busy">占线</string>
34+
<string name="twe_call_answer">接听</string>
35+
36+
<string name="wx_voip_incoming_call">来电</string>
37+
<string name="wx_voip_hangup">已挂断</string>
38+
<string name="wx_voip_refuse">已拒接</string>
39+
<string name="wx_voip_busy">返回占线</string>
40+
<string name="wx_voip_timeout">已超时</string>
41+
<string name="wx_voip_peer_hangup">对方挂断</string>
42+
<string name="wx_voip_peer_cancel">对方取消</string>
3343

3444
<string name="local_resolution">请选择本地分辨率</string>
3545
<string name="local_frame_rate">请选择本地帧率</string>

docs/微信小程序音视频通话.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@
1818
- [iv\_avt\_voip\_init\_v2](#iv_avt_voip_init_v2)
1919
- [iv\_avt\_voip\_exit\_v2](#iv_avt_voip_exit_v2)
2020
- [iv\_avt\_voip\_call\_v2](#iv_avt_voip_call_v2)
21+
- [iv\_avt\_voip\_join\_v2](#iv_avt_voip_join_v2)
2122
- [iv\_avt\_voip\_hang\_up\_v2](#iv_avt_voip_hang_up_v2)
2223
- [iv\_avt\_voip\_is\_busy\_v2](#iv_avt_voip_is_busy_v2)
2324
- [iv\_avt\_voip\_activate\_license\_v2](#iv_avt_voip_activate_license_v2)
2425
- [iv\_avt\_voip\_get\_active\_device\_info\_v2](#iv_avt_voip_get_active_device_info_v2)
2526
- [iv\_avt\_voip\_get\_user\_list\_v2](#iv_avt_voip_get_user_list_v2)
2627
- [iv\_avt\_voip\_update\_authorize\_status\_cb](#iv_avt_voip_update_authorize_status_cb)
28+
- [iv\_avt\_voip\_join\_notify\_cb](#iv_avt_voip_join_notify_cb)
29+
- [iv\_avt\_voip\_cancel\_notify\_cb](#iv_avt_voip_cancel_notify_cb)
2730
- [4. 数据结构](#4-数据结构)
2831
- [数据结构列表](#数据结构列表)
2932
- [5. 注意事项](#5-注意事项)
@@ -441,6 +444,35 @@ int iv_avt_voip_call_v2(iv_cm_stream_type_e type, const char *open_id, voip_vide
441444
| IV_ERR_AVT_INPUT_PARAM_INVAILD | 初始化失败或未初始化 |
442445
| IV_ERR_AVT_FAILED | 其他错误 |
443446

447+
448+
### iv_avt_voip_join_v2
449+
450+
**功能描述**
451+
设备被呼叫时,调用此接口加入voip通话
452+
room_id来源可通过回调iv_avt_voip_join_notify_cb获取;如不使用sdk mqtt服务,则需要依赖其他方式从后台获取
453+
454+
**函数原型**
455+
```
456+
int iv_avt_voip_join_v2(const char *room_id, voip_video_info_s v_info, iv_voip_called_status_e status)
457+
```
458+
459+
**参数说明**
460+
| 参数名称 | 类型 | 描述 | 输入/输出 |
461+
| -------------------- | ------------------- | -------------------------------------------------------------------------------------------------- | --------- |
462+
| room_id | const char * | 加入被呼房间的room_id | 输入 |
463+
| v_info | voip_video_info_s | 设备端指定收发视频格式信息 | 输入 |
464+
| status | iv_voip_called_status_e | 呼叫状态 | 输入 |
465+
466+
**返回值**
467+
| 返回值 | 描述 |
468+
| ------------------------------ | ---------------------------------------------------------------------------------- |
469+
| IV_ERR_AVT_VOIP_NOT_ACTIVATED | 设备未激活 |
470+
| IV_ERR_AVT_VOIP_EXPIRED | 服务到期 |
471+
| IV_ERR_AVT_REQ_CHN_BUSY | 占线 |
472+
| IV_ERR_AVT_INPUT_PARAM_INVAILD | 初始化失败或未初始化 |
473+
| IV_ERR_AVT_FAILED | 其他错误 |
474+
475+
444476
### iv_avt_voip_hang_up_v2
445477

446478
**功能描述**
@@ -574,13 +606,48 @@ int (*iv_avt_voip_update_authorize_status_cb)(char *open_id, int status)
574606
| -------- | ------ | ------------------------ | --------- |
575607
| open_id | char * | 订阅用户的open_id | 输入 |
576608
| status | int | 0未授权订阅,1已授权订阅 | 输入 |
609+
**返回值**
610+
| 返回值 | 描述 |
611+
| ------ | ---- |
612+
| 0 | 正常 |
613+
| 非0值 | 异常 |
614+
615+
### iv_avt_voip_join_notify_cb
616+
617+
**功能描述**
618+
对端呼叫设备时通过该回调通知用户具体房间号, 用户拿到roomid后调用iv_avt_voip_join_v2 加入房间(此接口依赖mqtt)
619+
**函数原型**
620+
```
621+
int (*iv_avt_voip_join_notify_cb)(char *room_id);
622+
```
623+
624+
**参数说明**
625+
| 参数名称 | 类型 | 描述 | 输入/输出 |
626+
| -------- | ------ | ------------------------ | --------- |
627+
| room_id | char * | 订阅用户的open_id | 输入 |
577628

578629
**返回值**
579630
| 返回值 | 描述 |
580631
| ------ | ---- |
581632
| 0 | 正常 |
582633
| 非0值 | 异常 |
583634

635+
### iv_avt_voip_cancel_notify_cb
636+
**功能描述**
637+
对端(一般是小程序)呼叫设备时通过该回调通知用户取消呼叫的房间号(此接口依赖mqtt)
638+
**函数原型**
639+
```
640+
int (*iv_avt_voip_cancel_notify_cb)(char *room_id);
641+
```
642+
**参数说明**
643+
| 参数名称 | 类型 | 描述 | 输入/输出 |
644+
| -------- | ------ | ------------------------ | --------- |
645+
| room_id | char * | 订阅用户的open_id | 输入 |
646+
**返回值**
647+
| 返回值 | 描述 |
648+
| ------ | ---- |
649+
| 0 | 正常 |
650+
| 非0值 | 异常 |
584651

585652
# 4. 数据结构
586653

0 commit comments

Comments
 (0)