diff --git a/QNDroidRTCDemo/app/build.gradle b/QNDroidRTCDemo/app/build.gradle index 741f2ac..38c1c04 100644 --- a/QNDroidRTCDemo/app/build.gradle +++ b/QNDroidRTCDemo/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "com.qiniu.droid.rtc.demo" minSdkVersion 18 targetSdkVersion 28 - versionCode 29 - versionName "3.0.0" + versionCode 30 + versionName "3.0.1" buildConfigField "long", "BUILD_TIMESTAMP", System.currentTimeMillis() + "L" } @@ -36,7 +36,7 @@ dependencies { implementation 'de.greenrobot:eventbus:2.4.0' implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' - implementation 'com.qiniu:happy-dns:0.2.16' + implementation 'com.qiniu:happy-dns:0.2.17' // QNDroidRTCLibrary if (buildWithQNDroidRTCLibrary) { diff --git a/QNDroidRTCDemo/app/libs/qndroid-rtc-3.0.0.jar b/QNDroidRTCDemo/app/libs/qndroid-rtc-3.0.1.jar similarity index 53% rename from QNDroidRTCDemo/app/libs/qndroid-rtc-3.0.0.jar rename to QNDroidRTCDemo/app/libs/qndroid-rtc-3.0.1.jar index 744f065..e93f295 100644 Binary files a/QNDroidRTCDemo/app/libs/qndroid-rtc-3.0.0.jar and b/QNDroidRTCDemo/app/libs/qndroid-rtc-3.0.1.jar differ diff --git a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/RTCApplication.java b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/RTCApplication.java index b161ff0..8d92fc0 100644 --- a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/RTCApplication.java +++ b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/RTCApplication.java @@ -18,6 +18,6 @@ public void onCreate() { QNRTCEnv.init(getApplicationContext()); QNRTCEnv.setLogFileEnabled(true); // 设置自定义 DNS manager,不设置则使用 SDK 默认 DNS 服务 - QNRTCEnv.setDnsManager(Utils.getDefaultDnsManager(getApplicationContext())); + new Thread(() -> QNRTCEnv.setDnsManager(Utils.getDefaultDnsManager(getApplicationContext()))).start(); } } diff --git a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/activity/RoomActivity.java b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/activity/RoomActivity.java index 096c013..315802a 100644 --- a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/activity/RoomActivity.java +++ b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/activity/RoomActivity.java @@ -29,12 +29,13 @@ import com.qiniu.droid.rtc.QNBeautySetting; import com.qiniu.droid.rtc.QNCameraSwitchResultCallback; +import com.qiniu.droid.rtc.QNCaptureVideoCallback; import com.qiniu.droid.rtc.QNCustomMessage; import com.qiniu.droid.rtc.QNErrorCode; +import com.qiniu.droid.rtc.QNLocalAudioPacketCallback; import com.qiniu.droid.rtc.QNRTCEngine; import com.qiniu.droid.rtc.QNRTCEngineEventListener; import com.qiniu.droid.rtc.QNRTCSetting; -import com.qiniu.droid.rtc.QNLocalAudioPacketCallback; import com.qiniu.droid.rtc.QNRemoteAudioPacketCallback; import com.qiniu.droid.rtc.QNRoomState; import com.qiniu.droid.rtc.QNSourceType; @@ -61,12 +62,16 @@ import com.qiniu.droid.rtc.model.QNMergeJob; import com.qiniu.droid.rtc.model.QNMergeTrackOption; +import org.webrtc.VideoFrame; + +import java.util.concurrent.Semaphore; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.TimeUnit; import static com.qiniu.droid.rtc.demo.utils.Config.DEFAULT_BITRATE; import static com.qiniu.droid.rtc.demo.utils.Config.DEFAULT_FPS; @@ -173,6 +178,8 @@ public class RoomActivity extends Activity implements QNRTCEngineEventListener, */ private int mSerialNum = 0; + private Semaphore mCaptureStoppedSem = new Semaphore(1); + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -259,13 +266,25 @@ public boolean onLongClick(View v) { protected void onResume() { super.onResume(); // 开始视频采集 - mEngine.startCapture(); + startCaptureAfterAcquire(); if (!mIsJoinedRoom) { // 加入房间 mEngine.joinRoom(mRoomToken); } } + private void startCaptureAfterAcquire() { + boolean acquired = false; + try { + acquired = mCaptureStoppedSem.tryAcquire(2000, TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); + } + if (acquired) { + mEngine.startCapture(); + } + } + @Override protected void onPause() { super.onPause(); @@ -335,6 +354,28 @@ private void initQNRTCEngine() { .setVideoEncodeFormat(format) .setVideoPreviewFormat(format); mEngine = QNRTCEngine.createEngine(getApplicationContext(), setting, this); + mEngine.setCaptureVideoCallBack(new QNCaptureVideoCallback() { + @Override + public void onCaptureStarted() { + + } + + @Override + public void onRenderingFrame(VideoFrame.TextureBuffer texBuf, long timestampNs) { + + } + + @Override + public void onPreviewFrame(byte[] data, int width, int height, int rotation, int fmt, long timestampNs) { + + } + + @Override + public void onCaptureStopped() { + mCaptureStoppedSem.drainPermits(); + mCaptureStoppedSem.release(); + } + }); } /** diff --git a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RTCTrackMergeOption.java b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RTCTrackMergeOption.java index 96fe849..cdd70a3 100644 --- a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RTCTrackMergeOption.java +++ b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RTCTrackMergeOption.java @@ -1,8 +1,10 @@ package com.qiniu.droid.rtc.demo.model; import com.qiniu.droid.rtc.QNTrackInfo; +import com.qiniu.droid.rtc.QNTrackKind; import com.qiniu.droid.rtc.demo.utils.QNAppServer; import com.qiniu.droid.rtc.model.QNMergeTrackOption; +import com.qiniu.droid.rtc.model.QNStretchMode; public class RTCTrackMergeOption { @@ -12,13 +14,16 @@ public class RTCTrackMergeOption { private boolean mTrackInclude = true; private final QNMergeTrackOption mQNMergeTrackOption; - public RTCTrackMergeOption(QNTrackInfo QNTrackInfo) { - mQNTrackInfo = QNTrackInfo; + public RTCTrackMergeOption(QNTrackInfo trackInfo) { + mQNTrackInfo = trackInfo; mTrackId = mQNTrackInfo.getTrackId(); mQNMergeTrackOption = new QNMergeTrackOption(); - mQNMergeTrackOption.setWidth(QNAppServer.STREAMING_WIDTH); - mQNMergeTrackOption.setHeight(QNAppServer.STREAMING_HEIGHT); + if (trackInfo.getTrackKind().equals(QNTrackKind.VIDEO)) { + mQNMergeTrackOption.setWidth(QNAppServer.STREAMING_WIDTH); + mQNMergeTrackOption.setHeight(QNAppServer.STREAMING_HEIGHT); + mQNMergeTrackOption.setStretchMode(QNStretchMode.ASPECT_FILL); + } mQNMergeTrackOption.setTrackId(mTrackId); } diff --git a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RTCUser.java b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RTCUser.java deleted file mode 100644 index 90421a5..0000000 --- a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RTCUser.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.qiniu.droid.rtc.demo.model; - -import com.qiniu.droid.rtc.QNRTCUser; -import com.qiniu.droid.rtc.QNTrackInfo; - -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -public class RTCUser extends QNRTCUser { - - private UserTrack mAudioTrack; - private List mVideoTracks = new LinkedList<>(); - - public RTCUser(String userId, String userData) { - super(userId, userData); - } - - public UserTrack getAudioTrack() { - return mAudioTrack; - } - - public List getVideoTracks() { - return mVideoTracks; - } - - public List addTracks(List trackInfoList) { - List videoTracks = new ArrayList<>(); - for (QNTrackInfo item : trackInfoList) { - UserTrack newVideoTrack = addTrack(item); - if (newVideoTrack != null) { - videoTracks.add(newVideoTrack); - } - } - return videoTracks; - } - - private UserTrack addTrack(QNTrackInfo trackInfo) { - if (trackInfo.isAudio()) { - mAudioTrack = new UserTrack(trackInfo); - return null; - } else { - UserTrack newVideoTrack = new UserTrack(trackInfo); - // replace - mVideoTracks.remove(newVideoTrack); - mVideoTracks.add(newVideoTrack); - return newVideoTrack; - } - } - - public List removeTracks(List trackInfoList) { - List videoTracks = new ArrayList<>(); - for (QNTrackInfo item : trackInfoList) { - UserTrack removedVideoTrack = removeTracks(item); - if (removedVideoTrack != null) { - videoTracks.add(removedVideoTrack); - } - } - return videoTracks; - } - - private UserTrack removeTracks(QNTrackInfo trackInfo) { - if (trackInfo.isAudio()) { - mAudioTrack = null; - return null; - } else { - UserTrack newUserTrack = new UserTrack(trackInfo); - mVideoTracks.remove(newUserTrack); - return newUserTrack; - } - } -} diff --git a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RoomUserList.java b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RoomUserList.java deleted file mode 100644 index b4c0f89..0000000 --- a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/RoomUserList.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.qiniu.droid.rtc.demo.model; - -import com.qiniu.droid.rtc.QNTrackInfo; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class RoomUserList { - - private Map mRTCUserMap; - private List mRTCUsers; - private List mRTCVideoTracks; - - public RoomUserList() { - mRTCUserMap = new HashMap<>(); - mRTCUsers = new ArrayList<>(); - mRTCVideoTracks = new ArrayList<>(); - } - - public RTCUser getRoomUserByPosition(int pos) { - return mRTCUsers.get(pos); - } - - public RTCUser getRTCUserByUserId(String userId) { - return mRTCUserMap.get(userId); - } - - public List getRTCVideoTracks() { - return mRTCVideoTracks; - } - - public List getRTCAudioTracks() { - List rtcAudioTracks = new ArrayList<>(); - for (RTCUser item : mRTCUsers) { - if (item.getAudioTrack() != null) { - rtcAudioTracks.add(item.getAudioTrack()); - } - } - return rtcAudioTracks; - } - - public void onUserJoined(String userId, String userData) { - RTCUser rtcUser = new RTCUser(userId, userData); - mRTCUserMap.put(userId, rtcUser); - mRTCUsers.add(rtcUser); - } - - public void onUserLeft(String userId) { - RTCUser rtcUser = mRTCUserMap.remove(userId); - if (rtcUser != null) { - mRTCUsers.remove(rtcUser); - } - } - - public void onTracksPublished(String userId, List trackInfoList) { - RTCUser rtcUser = getRTCUserByUserId(userId); - if (rtcUser == null) { - return; - } - List userVideoTracks = rtcUser.addTracks(trackInfoList); - mRTCVideoTracks.addAll(userVideoTracks); - } - - public void onTracksUnPublished(String userId, List trackInfoList) { - RTCUser rtcUser = getRTCUserByUserId(userId); - if (rtcUser == null) { - return; - } - List userVideoTracks = rtcUser.removeTracks(trackInfoList); - mRTCVideoTracks.removeAll(userVideoTracks); - } - - public int size() { - return mRTCUsers.size(); - } -} diff --git a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/UserTrack.java b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/UserTrack.java deleted file mode 100644 index 573782b..0000000 --- a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/model/UserTrack.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.qiniu.droid.rtc.demo.model; - -import com.qiniu.droid.rtc.QNTrackInfo; -import com.qiniu.droid.rtc.demo.utils.QNAppServer; -import com.qiniu.droid.rtc.model.QNMergeTrackOption; - -public class UserTrack { - - private final String mTrackId; - private final QNTrackInfo mQNTrackInfo; - - private boolean mTrackInclude = true; - private final QNMergeTrackOption mQNMergeTrackOption; - - public UserTrack(QNTrackInfo QNTrackInfo) { - mQNTrackInfo = QNTrackInfo; - mTrackId = mQNTrackInfo.getTrackId(); - - mQNMergeTrackOption = new QNMergeTrackOption(); - mQNMergeTrackOption.setWidth(QNAppServer.STREAMING_WIDTH); - mQNMergeTrackOption.setHeight(QNAppServer.STREAMING_HEIGHT); - mQNMergeTrackOption.setTrackId(mTrackId); - } - - public String getTrackId() { - return mTrackId; - } - - public QNTrackInfo getQNTrackInfo() { - return mQNTrackInfo; - } - - public QNMergeTrackOption getQNMergeTrackOption() { - return mQNMergeTrackOption; - } - - public boolean isTrackInclude() { - return mTrackInclude; - } - - public void setTrackInclude(boolean trackInclude) { - mTrackInclude = trackInclude; - } - - public void updateQNMergeTrackOption(QNMergeTrackOption option) { - if (option == null) { - return; - } - mQNMergeTrackOption.setX(option.getX()); - mQNMergeTrackOption.setY(option.getY()); - mQNMergeTrackOption.setZ(option.getZ()); - mQNMergeTrackOption.setWidth(option.getWidth()); - mQNMergeTrackOption.setHeight(option.getHeight()); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof UserTrack) { - return mQNTrackInfo.equals(((UserTrack) obj).mQNTrackInfo); - } else { - return false; - } - } - - @Override - public int hashCode() { - return mQNTrackInfo.hashCode(); - } -} diff --git a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/utils/Utils.java b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/utils/Utils.java index 843bdd0..025c6c1 100644 --- a/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/utils/Utils.java +++ b/QNDroidRTCDemo/app/src/main/java/com/qiniu/droid/rtc/demo/utils/Utils.java @@ -37,6 +37,14 @@ public static void showAlertDialog(Context context, String message) { .show(); } + /** + * 创建自定义 dns manager + * + * 注意:该方法需要在子线程中调用,否则可能会抛异常 + * + * @param context 上下文 + * @return dns manager + */ public static DnsManager getDefaultDnsManager(Context context) { IResolver r0 = null; try { diff --git a/QNDroidRTCDemo/app/src/main/jniLibs/arm64-v8a/libqndroid_rtc.so b/QNDroidRTCDemo/app/src/main/jniLibs/arm64-v8a/libqndroid_rtc.so index e96e166..d4696dc 100755 Binary files a/QNDroidRTCDemo/app/src/main/jniLibs/arm64-v8a/libqndroid_rtc.so and b/QNDroidRTCDemo/app/src/main/jniLibs/arm64-v8a/libqndroid_rtc.so differ diff --git a/QNDroidRTCDemo/app/src/main/jniLibs/armeabi-v7a/libqndroid_rtc.so b/QNDroidRTCDemo/app/src/main/jniLibs/armeabi-v7a/libqndroid_rtc.so index dfea293..7ddb0b9 100755 Binary files a/QNDroidRTCDemo/app/src/main/jniLibs/armeabi-v7a/libqndroid_rtc.so and b/QNDroidRTCDemo/app/src/main/jniLibs/armeabi-v7a/libqndroid_rtc.so differ diff --git a/QNDroidRTCDemo/app/src/main/jniLibs/armeabi/libqndroid_rtc.so b/QNDroidRTCDemo/app/src/main/jniLibs/armeabi/libqndroid_rtc.so index 7f251b1..2d520f2 100755 Binary files a/QNDroidRTCDemo/app/src/main/jniLibs/armeabi/libqndroid_rtc.so and b/QNDroidRTCDemo/app/src/main/jniLibs/armeabi/libqndroid_rtc.so differ diff --git a/QNDroidRTCDemo/app/src/main/jniLibs/x86/libqndroid_rtc.so b/QNDroidRTCDemo/app/src/main/jniLibs/x86/libqndroid_rtc.so index 367a8c4..7aa86d7 100755 Binary files a/QNDroidRTCDemo/app/src/main/jniLibs/x86/libqndroid_rtc.so and b/QNDroidRTCDemo/app/src/main/jniLibs/x86/libqndroid_rtc.so differ diff --git a/README.md b/README.md index ec3bf40..bc526f9 100644 --- a/README.md +++ b/README.md @@ -33,14 +33,15 @@ QNDroidRTC 是七牛云推出的一款适用于 Android 平台的实时音视频 - 支持截帧功能 - 支持采集分辨率与编码分辨率分别采用不同朝向 - 支持背景音乐混音功能 -- 支持音频双声道 +- 音频支持双声道 - 支持音量大小回调 - 支持自定义消息 -- 支持合流背景图片的设置 -- 支持音频低采样率的配置 -- 支持音频软件 AEC 的配置 -- 支持对端网络信息回调 -- 支持本地离开房间的回调 +- 支持视频大小流 +- 支持 RTC 单路转推 +- 支持音频自定义数据传输和加解密 +- 支持自定义 DNS +- 支持设置图片连麦 +- 支持视频添加 SEI # 3 方案介绍 diff --git a/ReleaseNotes/release-notes-2.0.0.md b/ReleaseNotes/release-notes-2.0.0.md index e1b79fd..d4caa73 100644 --- a/ReleaseNotes/release-notes-2.0.0.md +++ b/ReleaseNotes/release-notes-2.0.0.md @@ -31,4 +31,4 @@ QNDroidRTC 是七牛推出的一款适用于 Android 平台的音视频通话 SD ## 问题反馈 -当你遇到任何问题时,可以通过在 GitHub 的 repo 提交 `issues` 来反馈问题,请尽可能的描述清楚遇到的问题,如果有错误信息也一同附带,并且在 ```Labels``` 中指明类型为 bug 或者其他。 [通过这里查看已有的 issues 和提交 bug](https://github.com/pili-engineering/QNRTC-Android/issues) +当你遇到任何问题时,可以通过在 GitHub 的 repo 提交 `issues` 来反馈问题,请尽可能的描述清楚遇到的问题,如果有错误信息也一同附带,并且在 ```Labels``` 中指明类型为 bug 或者其他。 [通过这里查看已有的 issues 和提交 bug](https://github.com/pili-engineering/QNRTC-Android) diff --git a/ReleaseNotes/release-notes-2.1.0.md b/ReleaseNotes/release-notes-2.1.0.md index 1f382e8..4a49db5 100644 --- a/ReleaseNotes/release-notes-2.1.0.md +++ b/ReleaseNotes/release-notes-2.1.0.md @@ -18,7 +18,7 @@ QNDroidRTC 是七牛推出的一款适用于 Android 平台的音视频通话 SD ## 缺陷 -- 修复美颜模块在部分手机上导致的黑屏和花屏问题 +- 修复美颜模块在部分手机上导致的黑屏和花屏问题 ## 问题反馈 diff --git a/ReleaseNotes/release-notes-2.5.0.md b/ReleaseNotes/release-notes-2.5.0.md index 35aaa48..a4f6b57 100644 --- a/ReleaseNotes/release-notes-2.5.0.md +++ b/ReleaseNotes/release-notes-2.5.0.md @@ -23,6 +23,15 @@ QNDroidRTC 是七牛推出的一款适用于 Android 平台的音视频通话 SD - 修复特定机型软编帧率较低问题 - 修复特定机型硬编码率无法升高问题 +## 注意事项 +- 如果您使用的版本是 2.5.0+,那么为了给您提供更好的使用体验,请务必依赖如下 dns 解析库: + +```java +dependencies { + implementation 'com.qiniu:happy-dns:0.2.17' +} +``` + ## 问题反馈 当你遇到任何问题时,可以通过在 GitHub 的 repo 提交 `issues` 来反馈问题,请尽可能的描述清楚遇到的问题,如果有错误信息也一同附带,并且在 ```Labels``` 中指明类型为 bug 或者其他。 [通过这里查看已有的 issues 和提交 bug](https://github.com/pili-engineering/QNRTC-Android/issues) diff --git a/ReleaseNotes/release-notes-3.0.0.md b/ReleaseNotes/release-notes-3.0.0.md index 64c1a9a..f5abc34 100644 --- a/ReleaseNotes/release-notes-3.0.0.md +++ b/ReleaseNotes/release-notes-3.0.0.md @@ -18,6 +18,15 @@ QNDroidRTC 是七牛推出的一款适用于 Android 平台的音视频通话 SD - 修复丢包率统计信息不准 +## 注意事项 +- 如果您使用的版本是 2.5.0+,那么为了给您提供更好的使用体验,请务必依赖如下 dns 解析库: + +```java +dependencies { + implementation 'com.qiniu:happy-dns:0.2.17' +} +``` + ## 问题反馈 当你遇到任何问题时,可以通过在 GitHub 的 repo 提交 `issues` 来反馈问题,请尽可能的描述清楚遇到的问题,如果有错误信息也一同附带,并且在 ```Labels``` 中指明类型为 bug 或者其他。 [通过这里查看已有的 issues 和提交 bug](https://github.com/pili-engineering/QNRTC-Android/issues) diff --git a/ReleaseNotes/release-notes-3.0.1.md b/ReleaseNotes/release-notes-3.0.1.md new file mode 100644 index 0000000..95af0a7 --- /dev/null +++ b/ReleaseNotes/release-notes-3.0.1.md @@ -0,0 +1,38 @@ +# QNDroidRTC Release Notes for 3.0.1 + +## 简介 + +QNDroidRTC 是七牛推出的一款适用于 Android 平台的音视频通话 SDK,提供了包括美颜、滤镜、音视频通话等多种功能,提供灵活的接口,支持高度定制以及二次开发。 + +## 版本 + +- 发布 qndroid-rtc-3.0.1.jar + +## 功能 + +- 支持摄像头切换图片连麦 +- 支持单路转推添加 SEI 功能 +- 支持添加视频水印功能 +- 支持合流时单独设置 Track 填充模式 +- 支持回调本地 Track 音量大小 +- 支持调节麦克风采集后音量 +- 支持对合流和单路任务设置延时关闭 + +## 缺陷 + +- 修复特定机型加入房间失败 +- 修复混音时低概率 ANR +- 修复某些机型初始化时抛出异常 + +## 注意事项 +- 如果您使用的版本是 2.5.0+,那么为了给您提供更好的使用体验,请务必依赖如下 dns 解析库: + +```java +dependencies { + implementation 'com.qiniu:happy-dns:0.2.17' +} +``` + +## 问题反馈 + +当你遇到任何问题时,可以通过在 GitHub 的 repo 提交 `issues` 来反馈问题,请尽可能的描述清楚遇到的问题,如果有错误信息也一同附带,并且在 ```Labels``` 中指明类型为 bug 或者其他。 [通过这里查看已有的 issues 和提交 bug](https://github.com/pili-engineering/QNRTC-Android/issues) diff --git a/releases/arm64-v8a/libqndroid_rtc.so b/releases/arm64-v8a/libqndroid_rtc.so index e96e166..d4696dc 100755 Binary files a/releases/arm64-v8a/libqndroid_rtc.so and b/releases/arm64-v8a/libqndroid_rtc.so differ diff --git a/releases/armeabi-v7a/libqndroid_rtc.so b/releases/armeabi-v7a/libqndroid_rtc.so index dfea293..7ddb0b9 100755 Binary files a/releases/armeabi-v7a/libqndroid_rtc.so and b/releases/armeabi-v7a/libqndroid_rtc.so differ diff --git a/releases/armeabi/libqndroid_rtc.so b/releases/armeabi/libqndroid_rtc.so index 7f251b1..2d520f2 100755 Binary files a/releases/armeabi/libqndroid_rtc.so and b/releases/armeabi/libqndroid_rtc.so differ diff --git a/releases/qndroid-rtc-3.0.0.jar b/releases/qndroid-rtc-3.0.1.jar similarity index 53% rename from releases/qndroid-rtc-3.0.0.jar rename to releases/qndroid-rtc-3.0.1.jar index 744f065..e93f295 100644 Binary files a/releases/qndroid-rtc-3.0.0.jar and b/releases/qndroid-rtc-3.0.1.jar differ diff --git a/releases/x86/libqndroid_rtc.so b/releases/x86/libqndroid_rtc.so index 367a8c4..7aa86d7 100755 Binary files a/releases/x86/libqndroid_rtc.so and b/releases/x86/libqndroid_rtc.so differ