Merge branch 'v1.5.0/agora' into v1.5.0/test

This commit is contained in:
Max
2023-11-07 10:02:04 +08:00
17 changed files with 137 additions and 608 deletions

View File

@@ -460,4 +460,4 @@
# For BannerViewPager
-keep class androidx.recyclerview.widget.** { *; }
-keep class androidx.viewpager2.widget.** { *; }
-keep class io.agora.**{*;}

View File

@@ -66,7 +66,7 @@
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<!-- 适配安卓12&11获取当前已安装的所有应用列表-->
<queries>
<intent>

View File

@@ -13,7 +13,6 @@ import android.widget.RelativeLayout;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import com.huawei.multimedia.audiokit.utils.LogUtils;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
@@ -54,7 +53,6 @@ import com.nnbc123.library.net.rxnet.callback.CallBack;
import com.nnbc123.library.utils.CommonUtils;
import com.nnbc123.library.utils.JavaUtil;
import com.nnbc123.library.utils.ListUtils;
import com.nnbc123.library.utils.LogUtil;
import com.nnbc123.library.utils.codec.DESUtils;
import com.nnbc123.library.utils.config.BasicConfig;

View File

@@ -76,7 +76,7 @@ dependencies {
api 'com.tencent.mm.opensdk:wechat-sdk-android:+'
// 声网
api 'io.agora.rtc:full-sdk:3.0.1'
api 'io.agora.rtc:voice-sdk:4.2.3'
// core
implementation 'com.liulishuo.okdownload:okdownload:1.0.4'

View File

@@ -9,7 +9,7 @@ import com.nnbc123.core.room.bean.RoomAudioSdkType;
import com.nnbc123.core.room.bean.RoomInfo;
import com.nnbc123.core.utils.LogUtils;
import io.agora.rtc.Constants;
import io.agora.rtc2.Constants;
public class AudioEngineManager {

View File

@@ -8,8 +8,9 @@ import com.nnbc123.core.manager.IMNetEaseManager;
import com.nnbc123.core.manager.RoomEvent;
import com.nnbc123.library.utils.SingleToastUtil;
import io.agora.rtc.Constants;
import io.agora.rtc.IRtcEngineEventHandler;
import io.agora.rtc2.ClientRoleOptions;
import io.agora.rtc2.Constants;
import io.agora.rtc2.IRtcEngineEventHandler;
/**
* @author by 梁馨 on 2020/9/14.
@@ -101,6 +102,9 @@ public class EngineEventHandler extends IRtcEngineEventHandler {
@Override
public void onAudioVolumeIndication(AudioVolumeInfo[] speakers, int totalVolume) {
super.onAudioVolumeIndication(speakers, totalVolume);
if (totalVolume == 0) {
return;
}
RtcEngineManager manager = RtcEngineManager.get();
Message message = manager.mRtcEngineHandler.obtainMessage();
message.what = RtcEngineHandler.onAudioVolumeIndication;
@@ -121,8 +125,8 @@ public class EngineEventHandler extends IRtcEngineEventHandler {
}
@Override
public void onClientRoleChanged(int oldRole, int newRole) {
super.onClientRoleChanged(oldRole, newRole);
public void onClientRoleChanged(int oldRole, int newRole, ClientRoleOptions newRoleOptions) {
super.onClientRoleChanged(oldRole, newRole, newRoleOptions);
//角色切换 麦克风切换
if (newRole == Constants.CLIENT_ROLE_BROADCASTER) {
RtcEngineManager.get().setMute(RtcEngineManager.get().isMute);
@@ -137,11 +141,6 @@ public class EngineEventHandler extends IRtcEngineEventHandler {
);
}
@Override
public void onFirstLocalAudioFrame(int i) {
super.onFirstLocalAudioFrame(i);
}
@Override
public void onRemoteAudioStateChanged(int i, int i1, int i2, int i3) {
super.onRemoteAudioStateChanged(i, i1, i2, i3);

View File

@@ -1,5 +1,7 @@
package com.nnbc123.core.manager.agora;
import static io.agora.rtc2.Constants.AUDIO_RECORDING_QUALITY_LOW;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
@@ -16,10 +18,9 @@ import org.jetbrains.annotations.NotNull;
import java.io.File;
import io.agora.rtc.Constants;
import io.agora.rtc.IRtcEngineEventHandler;
import io.agora.rtc2.Constants;
import io.agora.rtc2.IRtcEngineEventHandler;
import static io.agora.rtc.Constants.AUDIO_RECORDING_QUALITY_LOW;
/**
* @author by 梁馨 on 2020/9/14.

View File

@@ -1,5 +1,8 @@
package com.nnbc123.core.manager.agora;
import static io.agora.rtc2.Constants.AUDIO_PROFILE_MUSIC_STANDARD;
import static io.agora.rtc2.Constants.AUDIO_SCENARIO_GAME_STREAMING;
import android.os.Environment;
import android.os.Handler;
import android.text.TextUtils;
@@ -18,11 +21,9 @@ import com.nnbc123.library.utils.config.BasicConfig;
import java.io.File;
import java.util.Locale;
import io.agora.rtc.Constants;
import io.agora.rtc.RtcEngine;
import io.agora.rtc2.Constants;
import io.agora.rtc2.RtcEngine;
import static io.agora.rtc.Constants.AUDIO_PROFILE_MUSIC_STANDARD;
import static io.agora.rtc.Constants.AUDIO_SCENARIO_GAME_STREAMING;
/**
@@ -64,7 +65,7 @@ public class RtcEngineManager extends BaseEngine {
mRtcEngine.setAudioProfile(AUDIO_PROFILE_MUSIC_STANDARD, AUDIO_SCENARIO_GAME_STREAMING);
mRtcEngine.enableAudioVolumeIndication(600, 3, false);
mRtcEngine.setDefaultAudioRoutetoSpeakerphone(true);
mRtcEngine.setExternalVideoSource(true, false, true);
mRtcEngine.setExternalVideoSource(true, false, Constants.ExternalVideoSourceType.ENCODED_VIDEO_FRAME);
mRtcEngine.setRecordingAudioFrameParameters(48000, 2, 2, 960);
mRtcEngine.setVideoProfile(Constants.VIDEO_PROFILE_360P, false);
mRtcEngine.enableDualStreamMode(true);
@@ -177,6 +178,7 @@ public class RtcEngineManager extends BaseEngine {
return;
}
mRtcEngine.muteLocalAudioStream(mute);
mRtcEngine.enableLocalAudio(!mute);
isMute = mute;
}
@@ -239,7 +241,7 @@ public class RtcEngineManager extends BaseEngine {
mRtcEngine.stopAudioMixing();
int result;
try {
result = mRtcEngine.startAudioMixing(filePath, loopback, false, cycle);
result = mRtcEngine.startAudioMixing(filePath, loopback, cycle);
} catch (Exception e) {
return -1;
}

View File

@@ -6,24 +6,22 @@ import com.tencent.rtmp.ui.TXCloudVideoView;
import com.tencent.trtc.TRTCCloud;
import com.tencent.trtc.TRTCCloudDef;
import io.agora.rtc.IAudioEffectManager;
import io.agora.rtc.IAudioFrameObserver;
import io.agora.rtc.IMetadataObserver;
import io.agora.rtc.IRtcEngineEventHandler;
import io.agora.rtc.internal.LastmileProbeConfig;
import io.agora.rtc.live.LiveInjectStreamConfig;
import io.agora.rtc.live.LiveTranscoding;
import io.agora.rtc.mediaio.IVideoSink;
import io.agora.rtc.mediaio.IVideoSource;
import io.agora.rtc.models.UserInfo;
import io.agora.rtc.video.AgoraImage;
import io.agora.rtc.video.AgoraVideoFrame;
import io.agora.rtc.video.BeautyOptions;
import io.agora.rtc.video.CameraCapturerConfiguration;
import io.agora.rtc.video.ChannelMediaRelayConfiguration;
import io.agora.rtc.video.VideoCanvas;
import io.agora.rtc.video.VideoEncoderConfiguration;
import io.agora.rtc.video.WatermarkOptions;
import io.agora.rtc2.IAudioEffectManager;
import io.agora.rtc2.IAudioFrameObserver;
import io.agora.rtc2.IMetadataObserver;
import io.agora.rtc2.IRtcEngineEventHandler;
import io.agora.rtc2.UserInfo;
import io.agora.rtc2.internal.LastmileProbeConfig;
import io.agora.rtc2.live.LiveInjectStreamConfig;
import io.agora.rtc2.live.LiveTranscoding;
import io.agora.rtc2.video.AgoraImage;
import io.agora.rtc2.video.AgoraVideoFrame;
import io.agora.rtc2.video.BeautyOptions;
import io.agora.rtc2.video.CameraCapturerConfiguration;
import io.agora.rtc2.video.ChannelMediaRelayConfiguration;
import io.agora.rtc2.video.VideoCanvas;
import io.agora.rtc2.video.VideoEncoderConfiguration;
import io.agora.rtc2.video.WatermarkOptions;
/**
* 默认实现所有的IRTCEngine避免两个adapter需要实现所有的接口
@@ -424,16 +422,6 @@ public class BaseAdapterImpl implements IRTCEngine {
return 0;
}
@Override
public int setLocalVoiceChanger(int voiceChanger) {
return 0;
}
@Override
public int setLocalVoiceReverbPreset(int preset) {
return 0;
}
@Override
public int enableSoundPositionIndication(boolean enabled) {
return 0;
@@ -559,21 +547,6 @@ public class BaseAdapterImpl implements IRTCEngine {
return 0;
}
@Override
public int setVideoSource(IVideoSource source) {
return 0;
}
@Override
public int setLocalVideoRenderer(IVideoSink render) {
return 0;
}
@Override
public int setRemoteVideoRenderer(int uid, IVideoSink render) {
return 0;
}
@Override
public int setExternalAudioSink(boolean enabled, int sampleRate, int channels) {
return 0;

View File

@@ -2,8 +2,8 @@ package com.nnbc123.core.manager.trtc;
import android.graphics.Rect;
import io.agora.rtc.IRtcEngineEventHandler;
import io.agora.rtc.models.UserInfo;
import io.agora.rtc2.IRtcEngineEventHandler;
import io.agora.rtc2.UserInfo;
/**
* 对齐IRtcEngineEventHandler的所有接口

View File

@@ -1,23 +1,21 @@
package com.nnbc123.core.manager.trtc;
import io.agora.rtc.IAudioEffectManager;
import io.agora.rtc.IAudioFrameObserver;
import io.agora.rtc.IMetadataObserver;
import io.agora.rtc.IRtcEngineEventHandler;
import io.agora.rtc.internal.LastmileProbeConfig;
import io.agora.rtc.live.LiveInjectStreamConfig;
import io.agora.rtc.live.LiveTranscoding;
import io.agora.rtc.mediaio.IVideoSink;
import io.agora.rtc.mediaio.IVideoSource;
import io.agora.rtc.models.UserInfo;
import io.agora.rtc.video.AgoraImage;
import io.agora.rtc.video.AgoraVideoFrame;
import io.agora.rtc.video.BeautyOptions;
import io.agora.rtc.video.CameraCapturerConfiguration;
import io.agora.rtc.video.ChannelMediaRelayConfiguration;
import io.agora.rtc.video.VideoCanvas;
import io.agora.rtc.video.VideoEncoderConfiguration;
import io.agora.rtc.video.WatermarkOptions;
import io.agora.rtc2.IAudioEffectManager;
import io.agora.rtc2.IAudioFrameObserver;
import io.agora.rtc2.IMetadataObserver;
import io.agora.rtc2.IRtcEngineEventHandler;
import io.agora.rtc2.UserInfo;
import io.agora.rtc2.internal.LastmileProbeConfig;
import io.agora.rtc2.live.LiveInjectStreamConfig;
import io.agora.rtc2.live.LiveTranscoding;
import io.agora.rtc2.video.AgoraImage;
import io.agora.rtc2.video.AgoraVideoFrame;
import io.agora.rtc2.video.BeautyOptions;
import io.agora.rtc2.video.CameraCapturerConfiguration;
import io.agora.rtc2.video.ChannelMediaRelayConfiguration;
import io.agora.rtc2.video.VideoCanvas;
import io.agora.rtc2.video.VideoEncoderConfiguration;
import io.agora.rtc2.video.WatermarkOptions;
/**
* 接口类,和声网所有接口保持一致
@@ -146,10 +144,6 @@ public interface BaseAgoraInterface {
int setLocalVoiceReverb(int reverbKey, int value);
int setLocalVoiceChanger(int voiceChanger);
int setLocalVoiceReverbPreset(int preset);
int enableSoundPositionIndication(boolean enabled);
int setRemoteVoicePosition(int uid, double pan, double gain);
@@ -204,12 +198,6 @@ public interface BaseAgoraInterface {
int stopLastmileProbeTest();
int setVideoSource(IVideoSource source);
int setLocalVideoRenderer(IVideoSink render);
int setRemoteVideoRenderer(int uid, IVideoSink render);
int setExternalAudioSink(boolean enabled, int sampleRate, int channels);
int pullPlaybackAudioFrame(byte[] data, int lengthInByte);

View File

@@ -6,7 +6,8 @@ import com.tencent.trtc.TRTCCloud;
import java.util.HashSet;
import java.util.Set;
import io.agora.rtc.IAudioEffectManager;
import io.agora.rtc2.IAudioEffectManager;
/**
* 音效的控制类
@@ -103,6 +104,11 @@ public class TRTCEffectManager implements IAudioEffectManager {
return 0;
}
@Override
public int playEffect(int soundId, String filePath, int loopCount, double pitch, double pan, double gain, boolean publish, int startPos) {
return 0;
}
@Override
public int stopEffect(int soundId) {
stopAudioEffect(soundId);
@@ -120,6 +126,11 @@ public class TRTCEffectManager implements IAudioEffectManager {
return 0;
}
@Override
public int preloadEffect(int soundId, String filePath, int startPos) {
return 0;
}
@Override
public int unloadEffect(int soundId) {
return 0;

View File

@@ -32,22 +32,20 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import io.agora.rtc.IAudioEffectManager;
import io.agora.rtc.IAudioFrameObserver;
import io.agora.rtc.IMetadataObserver;
import io.agora.rtc.IRtcEngineEventHandler;
import io.agora.rtc.live.LiveTranscoding;
import io.agora.rtc.mediaio.IVideoFrameConsumer;
import io.agora.rtc.mediaio.IVideoSink;
import io.agora.rtc.mediaio.IVideoSource;
import io.agora.rtc.video.AgoraImage;
import io.agora.rtc.video.AgoraVideoFrame;
import io.agora.rtc.video.BeautyOptions;
import io.agora.rtc.video.CameraCapturerConfiguration;
import io.agora.rtc.video.ChannelMediaRelayConfiguration;
import io.agora.rtc.video.VideoCanvas;
import io.agora.rtc.video.VideoEncoderConfiguration;
import io.agora.rtc.video.WatermarkOptions;
import io.agora.rtc2.Constants;
import io.agora.rtc2.IAudioEffectManager;
import io.agora.rtc2.IAudioFrameObserver;
import io.agora.rtc2.IMetadataObserver;
import io.agora.rtc2.IRtcEngineEventHandler;
import io.agora.rtc2.live.LiveTranscoding;
import io.agora.rtc2.video.AgoraImage;
import io.agora.rtc2.video.AgoraVideoFrame;
import io.agora.rtc2.video.BeautyOptions;
import io.agora.rtc2.video.CameraCapturerConfiguration;
import io.agora.rtc2.video.ChannelMediaRelayConfiguration;
import io.agora.rtc2.video.VideoCanvas;
import io.agora.rtc2.video.VideoEncoderConfiguration;
import io.agora.rtc2.video.WatermarkOptions;
import static com.tencent.liteav.audio.TXAudioEffectManager.TXVoiceChangerType.TXLiveVoiceChangerType_0;
import static com.tencent.liteav.audio.TXAudioEffectManager.TXVoiceChangerType.TXLiveVoiceChangerType_1;
@@ -91,59 +89,43 @@ import static com.tencent.trtc.TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_LANDSCAPE
import static com.tencent.trtc.TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG;
import static com.tencent.trtc.TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL;
import static com.tencent.trtc.TRTCCloudDef.VIDEO_QOS_CONTROL_SERVER;
import static io.agora.rtc.Constants.AUDIO_REVERB_HIPHOP;
import static io.agora.rtc.Constants.AUDIO_REVERB_KTV;
import static io.agora.rtc.Constants.AUDIO_REVERB_OFF;
import static io.agora.rtc.Constants.AUDIO_REVERB_POPULAR;
import static io.agora.rtc.Constants.AUDIO_REVERB_RNB;
import static io.agora.rtc.Constants.AUDIO_REVERB_ROCK;
import static io.agora.rtc.Constants.AUDIO_REVERB_STUDIO;
import static io.agora.rtc.Constants.AUDIO_REVERB_VOCAL_CONCERT;
import static io.agora.rtc.Constants.AUDIO_ROUTE_DEFAULT;
import static io.agora.rtc.Constants.AUDIO_ROUTE_EARPIECE;
import static io.agora.rtc.Constants.AUDIO_ROUTE_SPEAKERPHONE;
import static io.agora.rtc.Constants.CHANNEL_PROFILE_COMMUNICATION;
import static io.agora.rtc.Constants.CHANNEL_PROFILE_LIVE_BROADCASTING;
import static io.agora.rtc.Constants.CLIENT_ROLE_AUDIENCE;
import static io.agora.rtc.Constants.CLIENT_ROLE_BROADCASTER;
import static io.agora.rtc.Constants.LOG_FILTER_CRITICAL;
import static io.agora.rtc.Constants.LOG_FILTER_DEBUG;
import static io.agora.rtc.Constants.LOG_FILTER_ERROR;
import static io.agora.rtc.Constants.LOG_FILTER_INFO;
import static io.agora.rtc.Constants.LOG_FILTER_OFF;
import static io.agora.rtc.Constants.LOG_FILTER_WARNING;
import static io.agora.rtc.Constants.REMOTE_VIDEO_STATE_REASON_INTERNAL;
import static io.agora.rtc.Constants.REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED;
import static io.agora.rtc.Constants.REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED;
import static io.agora.rtc.Constants.REMOTE_VIDEO_STATE_STARTING;
import static io.agora.rtc.Constants.REMOTE_VIDEO_STATE_STOPPED;
import static io.agora.rtc.Constants.VIDEO_STREAM_HIGH;
import static io.agora.rtc.Constants.VIDEO_STREAM_LOW;
import static io.agora.rtc.Constants.VOICE_CHANGER_BABYBOY;
import static io.agora.rtc.Constants.VOICE_CHANGER_BABYGIRL;
import static io.agora.rtc.Constants.VOICE_CHANGER_ETHEREAL;
import static io.agora.rtc.Constants.VOICE_CHANGER_HULK;
import static io.agora.rtc.Constants.VOICE_CHANGER_OFF;
import static io.agora.rtc.Constants.VOICE_CHANGER_OLDMAN;
import static io.agora.rtc.Constants.VOICE_CHANGER_ZHUBAJIE;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_ADM_STOP_PLAYOUT;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_BITRATE_LIMIT;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_CONNECTION_INTERRUPTED;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_CONNECTION_LOST;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_FAILED;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_INVALID_APP_ID;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_INVALID_CHANNEL_NAME;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_JOIN_CHANNEL_REJECTED;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_OK;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_SIZE_TOO_LARGE;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_START_CAMERA;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_TOO_MANY_DATA_STREAMS;
import static io.agora.rtc.IRtcEngineEventHandler.ErrorCode.ERR_VDM_CAMERA_NOT_AUTHORIZED;
import static io.agora.rtc.IRtcEngineEventHandler.WarnCode.WARN_INVALID_VIEW;
import static io.agora.rtc.video.CameraCapturerConfiguration.CAMERA_DIRECTION.CAMERA_FRONT;
import static io.agora.rtc.video.VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_ADAPTIVE;
import static io.agora.rtc.video.VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_LANDSCAPE;
import static io.agora.rtc.video.VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_PORTRAIT;
import static io.agora.rtc2.Constants.AUDIO_ROUTE_DEFAULT;
import static io.agora.rtc2.Constants.AUDIO_ROUTE_EARPIECE;
import static io.agora.rtc2.Constants.AUDIO_ROUTE_SPEAKERPHONE;
import static io.agora.rtc2.Constants.CHANNEL_PROFILE_COMMUNICATION;
import static io.agora.rtc2.Constants.CHANNEL_PROFILE_LIVE_BROADCASTING;
import static io.agora.rtc2.Constants.CLIENT_ROLE_AUDIENCE;
import static io.agora.rtc2.Constants.CLIENT_ROLE_BROADCASTER;
import static io.agora.rtc2.Constants.LOG_FILTER_CRITICAL;
import static io.agora.rtc2.Constants.LOG_FILTER_DEBUG;
import static io.agora.rtc2.Constants.LOG_FILTER_ERROR;
import static io.agora.rtc2.Constants.LOG_FILTER_INFO;
import static io.agora.rtc2.Constants.LOG_FILTER_OFF;
import static io.agora.rtc2.Constants.LOG_FILTER_WARNING;
import static io.agora.rtc2.Constants.REMOTE_VIDEO_STATE_REASON_INTERNAL;
import static io.agora.rtc2.Constants.REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED;
import static io.agora.rtc2.Constants.REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED;
import static io.agora.rtc2.Constants.REMOTE_VIDEO_STATE_STARTING;
import static io.agora.rtc2.Constants.REMOTE_VIDEO_STATE_STOPPED;
import static io.agora.rtc2.Constants.VIDEO_STREAM_HIGH;
import static io.agora.rtc2.Constants.VIDEO_STREAM_LOW;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_ADM_STOP_PLAYOUT;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_BITRATE_LIMIT;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_CONNECTION_INTERRUPTED;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_CONNECTION_LOST;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_FAILED;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_INVALID_APP_ID;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_INVALID_CHANNEL_NAME;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_JOIN_CHANNEL_REJECTED;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_OK;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_SIZE_TOO_LARGE;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_TOO_MANY_DATA_STREAMS;
import static io.agora.rtc2.IRtcEngineEventHandler.ErrorCode.ERR_VDM_CAMERA_NOT_AUTHORIZED;
import static io.agora.rtc2.IRtcEngineEventHandler.WarnCode.WARN_INVALID_VIEW;
import static io.agora.rtc2.video.CameraCapturerConfiguration.CAMERA_DIRECTION.CAMERA_FRONT;
import static io.agora.rtc2.video.VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_ADAPTIVE;
import static io.agora.rtc2.video.VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_LANDSCAPE;
import static io.agora.rtc2.video.VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_PORTRAIT;
/**
* TRTC适配层
@@ -212,7 +194,7 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
tmpErrCode = ERR_CONNECTION_INTERRUPTED;
break;
case ERR_CAMERA_START_FAIL:
tmpErrCode = ERR_START_CAMERA;
tmpErrCode = Constants.ERR_VDM_CAMERA_NOT_AUTHORIZED;
break;
case ERR_PLAY_LIVE_STREAM_NET_DISCONNECT:
tmpErrCode = ERR_CONNECTION_INTERRUPTED;
@@ -675,32 +657,10 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
private long lastSecondSendStreamTime = 0;
private long sendStreamSizeInSecond = 0;
private int appScene = TRTC_APP_SCENE_VIDEOCALL;
private IVideoSink localVideoRender;
TRTCCloudListener.TRTCVideoRenderListener localVideoRenderlistener = new TRTCCloudListener.TRTCVideoRenderListener() {
@Override
public void onRenderVideoFrame(String userId, int streamType, TRTCCloudDef.TRTCVideoFrame frame) {
switch (frame.bufferType) {
case TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_BYTE_BUFFER:////BYTE_BUFFER
localVideoRender.consumeByteBufferFrame(frame.buffer, frame.pixelFormat, frame.width, frame.height, frame.rotation, frame.timestamp);
break;
case TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_BYTE_ARRAY://BYTE_ARRAY
localVideoRender.consumeByteArrayFrame(frame.data, frame.pixelFormat, frame.width, frame.height, frame.rotation, frame.timestamp);
break;
case TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_TEXTURE://TEXTURE
localVideoRender.consumeTextureFrame(frame.texture.textureId, frame.pixelFormat, frame.width, frame.height, frame.rotation, frame.timestamp, null);
break;
default:
break;
}
}
};
private int localVideoRenderBufferType;
private Map<Integer, IVideoSink> remoteVideoRenders = new HashMap<Integer, IVideoSink>();
private Map<Integer, Integer> remoteVideoRenderBufferTypes = new HashMap<Integer, Integer>();
private boolean enableExternalVideo = false;
private boolean externalVideoUseTexture = false;
private IVideoSource videoSource;
private VideoEncoderConfiguration videoEncoderConfiguration = new VideoEncoderConfiguration();
private boolean bBigVideoParamSet = false;
private boolean bShouldSetSmallVideo = false;
@@ -1033,15 +993,10 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
enableVideoFlag = true;
lastSecondSendStreamTime = 0;
sendStreamSizeInSecond = 0;
remoteVideoRenders.clear();
enableExternalVideo = false;
onUserVideoAvailableCnt = 0;
externalVideoUseTexture = false;
remoteVideoAvaibleCnt.clear();
if (videoSource != null) {
videoSource.onStop();
videoSource.onDispose();
}
users.clear();
setLiveTransCodingFlag = false;
isStartPreview = false;
@@ -1245,77 +1200,6 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
return 0;
}
@Override
public int setLocalVoiceChanger(int voiceChanger) {
if (!enableAudioFlag) {
return -1;
}
TXAudioEffectManager.TXVoiceChangerType trtcVoiceChangerType = TXLiveVoiceChangerType_0;
switch (voiceChanger) {
case VOICE_CHANGER_OFF://原声,即关闭本地语音变声
trtcVoiceChangerType = TXLiveVoiceChangerType_0;
break;
case VOICE_CHANGER_OLDMAN://老男孩
trtcVoiceChangerType = TXLiveVoiceChangerType_1;
break;
case VOICE_CHANGER_BABYBOY://小男孩
trtcVoiceChangerType = TXLiveVoiceChangerType_2;
break;
case VOICE_CHANGER_BABYGIRL://小女孩
trtcVoiceChangerType = TXLiveVoiceChangerType_3;
break;
case VOICE_CHANGER_ZHUBAJIE://猪八戒
trtcVoiceChangerType = TXLiveVoiceChangerType_4;
break;
case VOICE_CHANGER_ETHEREAL://空灵
trtcVoiceChangerType = TXLiveVoiceChangerType_5;
break;
case VOICE_CHANGER_HULK://绿巨人
trtcVoiceChangerType = TXLiveVoiceChangerType_6;
break;
}
trtcCloud.getAudioEffectManager().setVoiceChangerType(trtcVoiceChangerType);
return 0;
}
@Override
public int setLocalVoiceReverbPreset(int preset) {
if (!enableAudioFlag) {
return -1;
}
TXAudioEffectManager.TXVoiceReverbType trtcVoiceReverbType = TXLiveVoiceReverbType_0;
switch (preset) {
case AUDIO_REVERB_OFF:
trtcVoiceReverbType = TXLiveVoiceReverbType_0;
break;
case AUDIO_REVERB_POPULAR:
trtcVoiceReverbType = TXLiveVoiceReverbType_1;
break;
case AUDIO_REVERB_RNB:
trtcVoiceReverbType = TXLiveVoiceReverbType_2;
break;
case AUDIO_REVERB_ROCK:
trtcVoiceReverbType = TXLiveVoiceReverbType_3;
break;
case AUDIO_REVERB_HIPHOP:
trtcVoiceReverbType = TXLiveVoiceReverbType_4;
break;
case AUDIO_REVERB_VOCAL_CONCERT:
trtcVoiceReverbType = TXLiveVoiceReverbType_5;
break;
case AUDIO_REVERB_KTV:
trtcVoiceReverbType = TXLiveVoiceReverbType_6;
break;
case AUDIO_REVERB_STUDIO:
trtcVoiceReverbType = TXLiveVoiceReverbType_7;
break;
default:
break;
}
trtcCloud.getAudioEffectManager().setVoiceReverbType(trtcVoiceReverbType);
return 0;
}
@Override
public int enableSoundPositionIndication(boolean enabled) {
if (!enableAudioFlag) {
@@ -1641,7 +1525,7 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
TRTCEngineAdapterListener.onError(WARN_INVALID_VIEW);
return -1;
}
localVideoView = new TXCloudVideoView(local.view);
localVideoView = new TXCloudVideoView(local.view.getContext());
isStartPreview = true;
this.startPreview();
@@ -1662,8 +1546,8 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
remoteVideoMap.remove(remote.uid);
return -1;
}
remoteVideoMap.put(remote.uid, new TXCloudVideoView(remote.view));
trtcCloud.startRemoteView(String.valueOf(remote.uid), new TXCloudVideoView(remote.view));
remoteVideoMap.put(remote.uid, new TXCloudVideoView(remote.view.getContext()));
trtcCloud.startRemoteView(String.valueOf(remote.uid), new TXCloudVideoView(remote.view.getContext()));
return 0;
}
@@ -1913,19 +1797,6 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
return null;
}
@Override
public int setVideoSource(IVideoSource source) {
videoSource = source;
if (videoSource != null) {
trtcCloud.enableCustomVideoCapture(true);
videoSource.onInitialize(new TRTCVideoFrameConsumer());
videoSource.onStart();
} else {
return -1;
}
return 0;
}
@Override
public void setExternalVideoSource(boolean enable, boolean useTexture, boolean pushMode) {
LogUtils.d(TAG, " enable:" + enable + " useTexture:" + useTexture + " pushMode:" + pushMode);
@@ -1991,7 +1862,7 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
frame.timestamp = videoFrame.timeStamp;
frame.rotation = videoFrame.rotation;
frame.texture.textureId = videoFrame.textureID;
frame.texture.eglContext10 = videoFrame.eglContext11;
frame.texture.eglContext10 = videoFrame.eglContext10;
frame.texture.eglContext14 = videoFrame.eglContext14;
trtcCloud.sendCustomVideoData(frame);
} else {
@@ -2006,131 +1877,6 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
return true;
}
@Override
public int setLocalVideoRenderer(IVideoSink render) {
if (!enableVideoFlag || render == null) {
LogUtils.d(TAG, "setLocalVideoRenderer error enableVideoFlag:" + enableVideoFlag + " render:" + render);
return -1;
}
localVideoRender = render;
localVideoRenderBufferType = render.getBufferType();
int pixelFormat;
int bufferType;
switch (render.getPixelFormat()) {
case 1://I420
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_I420;
break;
case 3://NV21
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_NV21;
break;
case 4://RGBA
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
case 10://TEXTURE_2D
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_Texture_2D;
break;
case 11://TEXTURE_OES
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_TEXTURE_EXTERNAL_OES;
break;
default:
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
}
switch (render.getBufferType()) {
case 1://BYTE_BUFFER
bufferType = TRTC_VIDEO_BUFFER_TYPE_BYTE_BUFFER;
break;
case 2://BYTE_ARRAY
bufferType = TRTC_VIDEO_BUFFER_TYPE_BYTE_ARRAY;
break;
case 3://TEXTURE
bufferType = TRTC_VIDEO_BUFFER_TYPE_TEXTURE;
break;
default:
bufferType = TRTC_VIDEO_BUFFER_TYPE_UNKNOWN;
break;
}
trtcCloud.setLocalVideoRenderListener(pixelFormat, bufferType, localVideoRenderlistener);
return 0;
}
@Override
public int setRemoteVideoRenderer(int uid, IVideoSink render) {
LogUtils.d(TAG, " uid:" + uid);
if (!enableVideoFlag) {
return -1;
}
TRTCCloudListener.TRTCVideoRenderListener remoteVideoRenderlistener = new TRTCCloudListener.TRTCVideoRenderListener() {
@Override
public void onRenderVideoFrame(String userId, int streamType, TRTCCloudDef.TRTCVideoFrame frame) {
try {
IVideoSink render = remoteVideoRenders.get(Integer.parseInt(userId));
switch (localVideoRenderBufferType) {
case 1:
render.consumeByteBufferFrame(frame.buffer, frame.pixelFormat, frame.width, frame.height, frame.rotation, frame.timestamp);
break;
case 2:
render.consumeByteArrayFrame(frame.data, frame.pixelFormat, frame.width, frame.height, frame.rotation, frame.timestamp);
break;
case 3:
render.consumeTextureFrame(frame.texture.textureId, frame.pixelFormat, frame.width, frame.height, frame.rotation, frame.timestamp, null);
break;
default:
break;
}
} catch (NumberFormatException e) {
LogUtils.d(TAG, "uid is not Integer type uid:" + userId);
return;
}
}
};
int pixelFormat;
int bufferType;
switch (render.getPixelFormat()) {
case 1:
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_I420;
break;
case 3:
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_NV21;
break;
case 4:
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
case 10:
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_Texture_2D;
break;
case 11:
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_TEXTURE_EXTERNAL_OES;
break;
default:
pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
}
switch (render.getBufferType()) {
case 1:
bufferType = TRTC_VIDEO_BUFFER_TYPE_BYTE_BUFFER;
break;
case 2:
bufferType = TRTC_VIDEO_BUFFER_TYPE_BYTE_ARRAY;
break;
case 3:
bufferType = TRTC_VIDEO_BUFFER_TYPE_TEXTURE;
break;
default:
bufferType = TRTC_VIDEO_BUFFER_TYPE_UNKNOWN;
break;
}
remoteVideoRenders.put(uid, render);
trtcCloud.setRemoteVideoRenderListener(String.valueOf(uid), pixelFormat, bufferType, remoteVideoRenderlistener);
return 0;
}
@Override
@Unsupport
public int setExternalAudioSink(boolean enabled, int sampleRate, int channels) {
@@ -2742,194 +2488,4 @@ public class TRTCEngineAdapter extends BaseAdapterImpl {
}
return 0;
}
public class TRTCVideoFrameConsumer implements IVideoFrameConsumer {
@Override
public void consumeByteBufferFrame(ByteBuffer buffer, int format, int width, int height, int rotation, long timestamp) {
LogUtils.d(TAG, "format:" + format + "width:" + width + " height:" + height + " rotation:" + rotation + " timestamp:" + timestamp);
if (rotation == 90 || rotation == 270) {
checkEncoderConfiguration(height, width);//旋转之后宽高对调
} else {
checkEncoderConfiguration(width, height);//0 ,180 旋转之后宽高不变
}
TRTCCloudDef.TRTCVideoFrame frame = new TRTCCloudDef.TRTCVideoFrame();
frame.bufferType = TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_BYTE_BUFFER;
switch (format) {
case 1://I420
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_I420;
break;
case 3://NV21
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_NV21;
break;
case 4://RGBA
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
case 10://TEXTURE_2D
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_Texture_2D;
break;
case 11://TEXTURE_OES
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_TEXTURE_EXTERNAL_OES;
break;
default:
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
}
frame.buffer = buffer;
frame.width = width;
frame.height = height;
frame.timestamp = timestamp;
int tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
switch (rotation) {
case 0:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
break;
case 90:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_90;
break;
case 180:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_180;
break;
case 270:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_270;
break;
default:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
break;
}
frame.rotation = tmpRotation;
trtcCloud.sendCustomVideoData(frame);
}
// File yuvfile = null;
// FileOutputStream outStream;
// void writeYUV(byte[] data){
// try {
// if(null==yuvfile) {
// yuvfile = new File("/sdcard/9158.yuv");
// outStream= new FileOutputStream(yuvfile);
// }
// outStream.write(data);
// } catch (IOException e) {
// LogUtils.d(TAG,"write yuv error");
// }
// }
@Override
public void consumeByteArrayFrame(byte[] data, int format, int width, int height, int rotation, long timestamp) {
LogUtils.d(TAG, "format:" + format + "width:" + width + " height:" + height + " rotation:" + rotation + " timestamp:" + timestamp);
//writeYUV(data);
if (rotation == 90 || rotation == 270) {
checkEncoderConfiguration(height, width);//旋转之后宽高对调
} else {
checkEncoderConfiguration(width, height);//0 ,180 旋转之后宽高不变
}
TRTCCloudDef.TRTCVideoFrame frame = new TRTCCloudDef.TRTCVideoFrame();
frame.bufferType = TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_BYTE_ARRAY;
switch (format) {
case 1://I420
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_I420;
break;
case 3://NV21
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_NV21;
break;
case 4://RGBA
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
case 10://TEXTURE_2D
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_Texture_2D;
break;
case 11://TEXTURE_OES
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_TEXTURE_EXTERNAL_OES;
break;
default:
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
}
frame.data = data;
frame.width = width;
frame.height = height;
frame.timestamp = timestamp;
int tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
switch (rotation) {
case 0:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
break;
case 90:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_90;
break;
case 180:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_180;
break;
case 270:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_270;
break;
default:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
break;
}
frame.rotation = tmpRotation;
trtcCloud.sendCustomVideoData(frame);
}
@Override
public void consumeTextureFrame(int textureId, int format, int width, int height, int rotation, long timestamp, float[] matrix) {
LogUtils.d(TAG, "format:" + format + "width:" + width + " height:" + height + " rotation:" + rotation + " timestamp:" + timestamp);
if (rotation == 90 || rotation == 270) {
checkEncoderConfiguration(height, width);//旋转之后宽高对调
} else {
checkEncoderConfiguration(width, height);//0 ,180 旋转之后宽高不变
}
TRTCCloudDef.TRTCVideoFrame frame = new TRTCCloudDef.TRTCVideoFrame();
frame.bufferType = TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_TEXTURE;
switch (format) {
case 1://I420
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_I420;
break;
case 3://NV21
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_NV21;
break;
case 4://RGBA
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
case 10://TEXTURE_2D
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_Texture_2D;
break;
case 11://TEXTURE_OES
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_TEXTURE_EXTERNAL_OES;
break;
default:
frame.pixelFormat = TRTC_VIDEO_PIXEL_FORMAT_UNKNOWN;
break;
}
frame.width = width;
frame.height = height;
frame.timestamp = timestamp;
frame.texture = new TRTCCloudDef.TRTCTexture();
frame.texture.textureId = textureId;
//frame.texture.eglContext10 = ;//videoFrame.eglContext11;
frame.texture.eglContext14 = EGL14.eglGetCurrentContext();//videoFrame.eglContext14;
int tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
switch (rotation) {
case 0:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
break;
case 90:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_90;
break;
case 180:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_180;
break;
case 270:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_270;
break;
default:
tmpRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
break;
}
frame.rotation = tmpRotation;
trtcCloud.sendCustomVideoData(frame);
}
}
}

View File

@@ -14,9 +14,9 @@ import com.nnbc123.core.manager.RoomEvent;
import com.nnbc123.core.manager.agora.RtcEngineHandler;
import com.nnbc123.library.utils.SingleToastUtil;
import io.agora.rtc.Constants;
import io.agora.rtc.IRtcEngineEventHandler;
import io.agora.rtc.models.UserInfo;
import io.agora.rtc2.Constants;
import io.agora.rtc2.IRtcEngineEventHandler;
import io.agora.rtc2.UserInfo;
/**
* @author by 梁馨 on 2020/9/14.

View File

@@ -1,6 +1,7 @@
package com.nnbc123.core.manager.trtc;
import static io.agora.rtc.Constants.AUDIO_RECORDING_QUALITY_LOW;
import static io.agora.rtc2.Constants.AUDIO_RECORDING_QUALITY_LOW;
import android.os.Environment;
import android.os.Handler;
@@ -18,8 +19,8 @@ import org.jetbrains.annotations.NotNull;
import java.io.File;
import io.agora.rtc.Constants;
import io.agora.rtc.IRtcEngineEventHandler;
import io.agora.rtc2.Constants;
import io.agora.rtc2.IRtcEngineEventHandler;
/**
* @author by 梁馨 on 2020/9/14.

View File

@@ -1,7 +1,8 @@
package com.nnbc123.core.manager.trtc;
import static io.agora.rtc.Constants.AUDIO_PROFILE_MUSIC_STANDARD;
import static io.agora.rtc.Constants.AUDIO_SCENARIO_GAME_STREAMING;
import static io.agora.rtc2.Constants.AUDIO_PROFILE_MUSIC_STANDARD;
import static io.agora.rtc2.Constants.AUDIO_SCENARIO_GAME_STREAMING;
import android.os.Handler;
import android.text.TextUtils;
@@ -19,7 +20,7 @@ import com.nnbc123.core.music.model.PlayerModel;
import com.nnbc123.library.utils.config.BasicConfig;
import com.orhanobut.logger.Logger;
import io.agora.rtc.Constants;
import io.agora.rtc2.Constants;
/**

View File

@@ -460,7 +460,6 @@ public class CaptureVideoActivity extends UI implements SurfaceHolder.Callback {
camera.unlock();
mediaRecorder.setCamera(camera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
setCamcorderProfile();