Skip to content

Commit ebc159d

Browse files
author
DESKTOP-1P165K6\dev
committed
merge lastest changes
1 parent d96e530 commit ebc159d

34 files changed

Lines changed: 2523 additions & 820 deletions

Android/APIExample/app/build.gradle

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,16 @@ android {
2626
sourceCompatibility JavaVersion.VERSION_1_8
2727
targetCompatibility JavaVersion.VERSION_1_8
2828
}
29+
30+
sourceSets {
31+
main {
32+
jniLibs.srcDirs = ['src/main/jniLibs']
33+
}
34+
}
2935
}
3036

3137
dependencies {
32-
implementation fileTree(dir: 'libs', include: ['*.jar'])
38+
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
3339

3440
implementation 'androidx.appcompat:appcompat:1.1.0'
3541
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
@@ -46,7 +52,7 @@ dependencies {
4652

4753
implementation 'io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:1.2.0'
4854
implementation 'com.yanzhenjie:permission:2.0.3'
49-
55+
implementation 'de.javagl:obj:0.2.1'
5056
implementation project(path: ':lib-stream-encrypt')
5157
implementation project(path: ':lib-push-externalvideo')
5258
implementation project(path: ':lib-raw-data')

Android/APIExample/app/src/main/AndroidManifest.xml

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:tools="http://schemas.android.com/tools"
43
package="io.agora.api.example">
54

65
<uses-permission android:name="android.permission.CAMERA" />
@@ -21,10 +20,10 @@
2120
android:theme="@style/AppTheme">
2221

2322
<activity
24-
android:label="@string/app_name"
25-
android:screenOrientation="portrait"
2623
android:name=".MainActivity"
27-
android:configChanges="keyboardHidden|screenSize|orientation">
24+
android:configChanges="keyboardHidden|screenSize|orientation"
25+
android:label="@string/app_name"
26+
android:screenOrientation="portrait">
2827
<intent-filter>
2928
<action android:name="android.intent.action.MAIN" />
3029

@@ -38,18 +37,17 @@
3837
<service android:name=".examples.advanced.SwitchCameraScreenShare$MediaProjectFgService"
3938
android:enabled="true"
4039
android:exported="false"
41-
tools:targetApi="q"
4240
android:foregroundServiceType="mediaProjection" />
4341

4442
<activity
45-
android:label="@string/setting"
4643
android:name=".SettingActivity"
47-
android:screenOrientation="portrait"/>
44+
android:label="@string/setting"
45+
android:screenOrientation="portrait" />
4846

4947
<activity
50-
android:label="@string/app_name"
5148
android:name=".ExampleActivity"
52-
android:screenOrientation="portrait"/>
49+
android:label="@string/app_name"
50+
android:screenOrientation="portrait" />
5351

5452
</application>
5553

Android/APIExample/app/src/main/java/io/agora/api/example/ExampleActivity.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818
import io.agora.api.example.examples.advanced.HostAcrossChannel;
1919
import io.agora.api.example.examples.advanced.InCallReport;
2020
import io.agora.api.example.examples.advanced.JoinMultipleChannel;
21-
//import io.agora.api.example.examples.advanced.MediaPlayerKit;
21+
import io.agora.api.example.examples.advanced.LiveStreaming;
22+
import io.agora.api.example.examples.advanced.MediaPlayerKit;
2223
import io.agora.api.example.examples.advanced.PlayAudioFiles;
2324
import io.agora.api.example.examples.advanced.PreCallTest;
25+
import io.agora.api.example.examples.advanced.ProcessAudioRawData;
2426
import io.agora.api.example.examples.advanced.ProcessRawData;
2527
import io.agora.api.example.examples.advanced.PushExternalVideo;
28+
import io.agora.api.example.examples.advanced.SendDataStream;
2629
import io.agora.api.example.examples.advanced.SetVideoProfile;
2730
import io.agora.api.example.examples.advanced.SwitchExternalVideo;
2831
import io.agora.api.example.examples.advanced.SetAudioProfile;
@@ -95,9 +98,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
9598
case R.id.action_mainFragment_to_PlayAudioFiles:
9699
fragment = new PlayAudioFiles();
97100
break;
98-
// case R.id.action_mainFragment_to_MediaPlayerKit:
99-
// fragment = new MediaPlayerKit();
100-
// break;
101+
case R.id.action_mainFragment_to_MediaPlayerKit:
102+
fragment = new MediaPlayerKit();
103+
break;
101104
case R.id.action_mainFragment_to_RTMPInjection:
102105
fragment = new RTMPInjection();
103106
break;
@@ -131,9 +134,15 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
131134
case R.id.action_mainFragment_to_set_video_profile:
132135
fragment = new SetVideoProfile();
133136
break;
134-
// case R.id.action_mainFragment_to_channel_encryption:
135-
// fragment = new ChannelEncryption();
136-
// break;
137+
case R.id.action_mainFragment_to_live_streaming:
138+
fragment = new LiveStreaming();
139+
break;
140+
case R.id.action_mainFragment_senddatastream:
141+
fragment = new SendDataStream();
142+
break;
143+
case R.id.action_mainFragment_raw_audio:
144+
fragment = new ProcessAudioRawData();
145+
break;
137146
default:
138147
fragment = new JoinChannelAudio();
139148
break;

Android/APIExample/app/src/main/java/io/agora/api/example/MainApplication.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package io.agora.api.example;
22

33
import android.app.Application;
4+
import android.content.Context;
45

56
import java.lang.annotation.Annotation;
67
import java.util.Collections;
78
import java.util.Set;
89

910
import io.agora.api.example.annotation.Example;
1011
import io.agora.api.example.common.model.Examples;
12+
import io.agora.api.example.common.model.GlobalSettings;
1113
import io.agora.api.example.utils.ClassUtils;
1214

1315
public class MainApplication extends Application {
16+
17+
private GlobalSettings globalSettings;
18+
1419
@Override
1520
public void onCreate() {
1621
super.onCreate();
@@ -36,4 +41,11 @@ private void initExamples() {
3641
e.printStackTrace();
3742
}
3843
}
44+
45+
public GlobalSettings getGlobalSettings() {
46+
if(globalSettings == null){
47+
globalSettings = new GlobalSettings();
48+
}
49+
return globalSettings;
50+
}
3951
}

Android/APIExample/app/src/main/java/io/agora/api/example/SettingActivity.java

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,27 @@
22

33
import android.os.Bundle;
44
import android.view.MenuItem;
5+
import android.view.View;
6+
import android.widget.AdapterView;
7+
import android.widget.ArrayAdapter;
58

69
import androidx.annotation.Nullable;
710
import androidx.appcompat.app.ActionBar;
811
import androidx.appcompat.app.AppCompatActivity;
12+
import androidx.appcompat.widget.AppCompatSpinner;
913
import androidx.appcompat.widget.AppCompatTextView;
1014

15+
import io.agora.api.example.common.model.GlobalSettings;
1116
import io.agora.rtc2.RtcEngine;
1217

1318
/**
1419
* @author cjw
1520
*/
16-
public class SettingActivity extends AppCompatActivity {
21+
public class SettingActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
1722
private static final String TAG = SettingActivity.class.getSimpleName();
1823

1924
private AppCompatTextView sdkVersion;
25+
private AppCompatSpinner orientationSpinner, fpsSpinner, dimensionSpinner;
2026

2127
@Override
2228
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -30,6 +36,60 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
3036
}
3137
sdkVersion = findViewById(R.id.sdkVersion);
3238
sdkVersion.setText(String.format(getString(R.string.sdkversion1), RtcEngine.getSdkVersion()));
39+
orientationSpinner = findViewById(R.id.orientation_spinner);
40+
fpsSpinner = findViewById(R.id.frame_rate_spinner);
41+
dimensionSpinner = findViewById(R.id.dimension_spinner);
42+
String[] mItems = getResources().getStringArray(R.array.orientations);
43+
String[] labels = new String[mItems.length];
44+
for(int i = 0;i<mItems.length;i++){
45+
int resId = getResources().getIdentifier( mItems[i], "string", getPackageName() );
46+
labels[i] = getString(resId);
47+
}
48+
ArrayAdapter<String> arrayAdapter =new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, labels);
49+
orientationSpinner.setAdapter(arrayAdapter);
50+
orientationSpinner.setOnItemSelectedListener(this);
51+
fpsSpinner.setOnItemSelectedListener(this);
52+
dimensionSpinner.setOnItemSelectedListener(this);
53+
fetchGlobalSettings();
54+
}
55+
56+
private void fetchGlobalSettings(){
57+
String[] mItems = getResources().getStringArray(R.array.orientations);
58+
String selectedItem = ((MainApplication) getApplication()).getGlobalSettings().getVideoEncodingOrientation();
59+
int i = 0;
60+
if(selectedItem!=null){
61+
for(String item : mItems){
62+
if(selectedItem.equals(item)){
63+
break;
64+
}
65+
i++;
66+
}
67+
}
68+
orientationSpinner.setSelection(i);
69+
mItems = getResources().getStringArray(R.array.fps);
70+
selectedItem = ((MainApplication) getApplication()).getGlobalSettings().getVideoEncodingFrameRate();
71+
i = 0;
72+
if(selectedItem!=null){
73+
for(String item : mItems){
74+
if(selectedItem.equals(item)){
75+
break;
76+
}
77+
i++;
78+
}
79+
}
80+
fpsSpinner.setSelection(i);
81+
mItems = getResources().getStringArray(R.array.dimensions);
82+
selectedItem = ((MainApplication) getApplication()).getGlobalSettings().getVideoEncodingDimension();
83+
i = 0;
84+
if(selectedItem!=null){
85+
for(String item : mItems){
86+
if(selectedItem.equals(item)){
87+
break;
88+
}
89+
i++;
90+
}
91+
}
92+
dimensionSpinner.setSelection(i);
3393
}
3494

3595
@Override
@@ -40,4 +100,25 @@ public boolean onOptionsItemSelected(MenuItem item) {
40100
}
41101
return super.onOptionsItemSelected(item);
42102
}
103+
104+
@Override
105+
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
106+
if(adapterView.getId() == R.id.orientation_spinner){
107+
GlobalSettings globalSettings = ((MainApplication)getApplication()).getGlobalSettings();
108+
globalSettings.setVideoEncodingOrientation(getResources().getStringArray(R.array.orientations)[i]);
109+
}
110+
else if(adapterView.getId() == R.id.frame_rate_spinner){
111+
GlobalSettings globalSettings = ((MainApplication)getApplication()).getGlobalSettings();
112+
globalSettings.setVideoEncodingFrameRate(getResources().getStringArray(R.array.fps)[i]);
113+
}
114+
else if(adapterView.getId() == R.id.dimension_spinner){
115+
GlobalSettings globalSettings = ((MainApplication)getApplication()).getGlobalSettings();
116+
globalSettings.setVideoEncodingDimension(getResources().getStringArray(R.array.dimensions)[i]);
117+
}
118+
}
119+
120+
@Override
121+
public void onNothingSelected(AdapterView<?> adapterView) {
122+
123+
}
43124
}

Android/APIExample/app/src/main/java/io/agora/api/example/common/model/StatisticsInfo.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ public String getLocalVideoStats() {
5757
.append(rtcStats.cpuAppUsage)
5858
.append("%/")
5959
.append(rtcStats.cpuTotalUsage)
60+
.append("%/")
61+
.append("\n")
62+
.append("VSend Loss: ")
63+
.append(localVideoStats.txPacketLossRate)
6064
.append("%")
6165
.toString();
6266
}

Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/AdjustVolume.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.agora.rtc2.Constants;
2626
import io.agora.rtc2.IRtcEngineEventHandler;
2727
import io.agora.rtc2.RtcEngine;
28+
import io.agora.rtc2.ChannelMediaOptions;
2829

2930
import static io.agora.api.example.common.model.Examples.ADVANCED;
3031

@@ -236,7 +237,11 @@ private void joinChannel(String channelId) {
236237
/** Allows a user to join a channel.
237238
if you do not specify the uid, we will generate the uid for you*/
238239
engine.enableAudioVolumeIndication(1000, 3);
239-
int res = engine.joinChannel(accessToken, channelId, "Extra Optional Data", 0);
240+
241+
ChannelMediaOptions option = new ChannelMediaOptions();
242+
option.autoSubscribeAudio = true;
243+
option.autoSubscribeVideo = true;
244+
int res = engine.joinChannel(accessToken, channelId, 0,option);
240245
if (res != 0) {
241246
// Usually happens with invalid parameters
242247
// Error code description can be found at:
@@ -264,14 +269,6 @@ public void onWarning(int warn) {
264269
Log.w(TAG, String.format("onWarning code %d message %s", warn, RtcEngine.getErrorDescription(warn)));
265270
}
266271

267-
/**Reports an error during SDK runtime.
268-
* Error code: https://docs.agora.io/en/Voice/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_i_rtc_engine_event_handler_1_1_error_code.html*/
269-
@Override
270-
public void onError(int err) {
271-
Log.e(TAG, String.format("onError code %d message %s", err, RtcEngine.getErrorDescription(err)));
272-
showAlert(String.format("onError code %d message %s", err, RtcEngine.getErrorDescription(err)));
273-
}
274-
275272
/**Occurs when a user leaves the channel.
276273
* @param stats With this callback, the application retrieves the channel information,
277274
* such as the call duration and statistics.*/

Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/CustomRemoteVideoRender.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818
import com.yanzhenjie.permission.AndPermission;
1919
import com.yanzhenjie.permission.runtime.Permission;
2020

21+
import io.agora.api.example.MainApplication;
2122
import io.agora.api.example.R;
2223
import io.agora.api.example.annotation.Example;
2324
import io.agora.api.example.common.BaseFragment;
2425
import io.agora.api.example.utils.CommonUtil;
2526
import io.agora.rtc2.Constants;
2627
import io.agora.rtc2.IRtcEngineEventHandler;
2728
import io.agora.rtc2.RtcEngine;
29+
import io.agora.rtc2.ChannelMediaOptions;
2830
import io.agora.rtc2.video.VideoCanvas;
2931
import io.agora.rtc2.video.VideoEncoderConfiguration;
3032

@@ -188,10 +190,10 @@ private void joinChannel(String channelId) {
188190
engine.enableVideo();
189191
// Setup video encoding configs
190192
engine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
191-
VD_640x360,
192-
FRAME_RATE_FPS_15,
193+
((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingDimensionObject(),
194+
VideoEncoderConfiguration.FRAME_RATE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingFrameRate()),
193195
STANDARD_BITRATE,
194-
ORIENTATION_MODE_ADAPTIVE
196+
VideoEncoderConfiguration.ORIENTATION_MODE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingOrientation())
195197
));
196198

197199
/**Please configure accessToken in the string_config file.
@@ -203,10 +205,13 @@ private void joinChannel(String channelId) {
203205
if (TextUtils.equals(accessToken, "") || TextUtils.equals(accessToken, "<#YOUR ACCESS TOKEN#>")) {
204206
accessToken = null;
205207
}
206-
engine.startPreview();
207208
/** Allows a user to join a channel.
208209
if you do not specify the uid, we will generate the uid for you*/
209-
int res = engine.joinChannel(accessToken, channelId, "Extra Optional Data", 0);
210+
211+
ChannelMediaOptions option = new ChannelMediaOptions();
212+
option.autoSubscribeAudio = true;
213+
option.autoSubscribeVideo = true;
214+
int res = engine.joinChannel(accessToken, channelId, 0, option);
210215
if (res != 0) {
211216
// Usually happens with invalid parameters
212217
// Error code description can be found at:
@@ -231,14 +236,6 @@ public void onWarning(int warn) {
231236
Log.w(TAG, String.format("onWarning code %d message %s", warn, RtcEngine.getErrorDescription(warn)));
232237
}
233238

234-
/**Reports an error during SDK runtime.
235-
* Error code: https://docs.agora.io/en/Voice/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_i_rtc_engine_event_handler_1_1_error_code.html*/
236-
@Override
237-
public void onError(int err) {
238-
Log.e(TAG, String.format("onError code %d message %s", err, RtcEngine.getErrorDescription(err)));
239-
showAlert(String.format("onError code %d message %s", err, RtcEngine.getErrorDescription(err)));
240-
}
241-
242239
/**Occurs when a user leaves the channel.
243240
* @param stats With this callback, the application retrieves the channel information,
244241
* such as the call duration and statistics.*/

0 commit comments

Comments
 (0)