Merge branch 'v1.5.0/agora' into v1.5.0/test
This commit is contained in:
@@ -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 {
|
||||
|
@@ -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);
|
||||
|
@@ -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.
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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的所有接口
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user