Skip to content

Commit 844e585

Browse files
authored
Merge pull request #101 from AgoraIO/dev/android
Dev/android
2 parents 912e8ab + 73ea743 commit 844e585

39 files changed

Lines changed: 3248 additions & 894 deletions

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,13 @@
99

1010
import io.agora.api.example.annotation.Example;
1111
import io.agora.api.example.common.model.Examples;
12+
import io.agora.api.example.common.model.GlobalSettings;
1213
import io.agora.api.example.utils.ClassUtils;
1314

1415
public class MainApplication extends Application {
16+
17+
private GlobalSettings globalSettings;
18+
1519
@Override
1620
public void onCreate() {
1721
super.onCreate();
@@ -37,4 +41,11 @@ private void initExamples() {
3741
e.printStackTrace();
3842
}
3943
}
44+
45+
public GlobalSettings getGlobalSettings() {
46+
if(globalSettings == null){
47+
globalSettings = new GlobalSettings();
48+
}
49+
return globalSettings;
50+
}
4051
}

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.rtc.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
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package io.agora.api.example.common.model;
2+
3+
import android.util.Log;
4+
5+
import java.lang.reflect.Field;
6+
7+
import io.agora.rtc.video.VideoEncoderConfiguration;
8+
9+
import static io.agora.rtc.video.VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_15;
10+
import static io.agora.rtc.video.VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_ADAPTIVE;
11+
import static io.agora.rtc.video.VideoEncoderConfiguration.VD_640x360;
12+
13+
public class GlobalSettings {
14+
private String videoEncodingDimension;
15+
private String videoEncodingFrameRate;
16+
private String videoEncodingOrientation;
17+
18+
public String getVideoEncodingDimension() {
19+
if(videoEncodingDimension == null)
20+
return "VD_640x360";
21+
else
22+
return videoEncodingDimension;
23+
}
24+
25+
public VideoEncoderConfiguration.VideoDimensions getVideoEncodingDimensionObject() {
26+
if(videoEncodingDimension == null)
27+
return VD_640x360;
28+
VideoEncoderConfiguration.VideoDimensions value = VD_640x360;
29+
try {
30+
Field tmp = VideoEncoderConfiguration.class.getDeclaredField(videoEncodingDimension);
31+
tmp.setAccessible(true);
32+
value = (VideoEncoderConfiguration.VideoDimensions) tmp.get(null);
33+
} catch (NoSuchFieldException e) {
34+
Log.e("Field", "Can not find field " + videoEncodingDimension);
35+
} catch (IllegalAccessException e) {
36+
Log.e("Field", "Could not access field " + videoEncodingDimension);
37+
}
38+
return value;
39+
}
40+
41+
public void setVideoEncodingDimension(String videoEncodingDimension) {
42+
this.videoEncodingDimension = videoEncodingDimension;
43+
}
44+
45+
public String getVideoEncodingFrameRate() {
46+
if(videoEncodingFrameRate == null)
47+
return FRAME_RATE_FPS_15.name();
48+
else
49+
return videoEncodingFrameRate;
50+
}
51+
52+
public void setVideoEncodingFrameRate(String videoEncodingFrameRate) {
53+
this.videoEncodingFrameRate = videoEncodingFrameRate;
54+
}
55+
56+
public String getVideoEncodingOrientation() {
57+
if(videoEncodingOrientation == null)
58+
return ORIENTATION_MODE_ADAPTIVE.name();
59+
else
60+
return videoEncodingOrientation;
61+
}
62+
63+
public void setVideoEncodingOrientation(String videoEncodingOrientation) {
64+
this.videoEncodingOrientation = videoEncodingOrientation;
65+
}
66+
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.yanzhenjie.permission.AndPermission;
2020
import com.yanzhenjie.permission.runtime.Permission;
2121

22+
import io.agora.api.example.MainApplication;
2223
import io.agora.api.example.R;
2324
import io.agora.api.example.annotation.Example;
2425
import io.agora.api.example.common.BaseFragment;
@@ -216,10 +217,10 @@ private void joinChannel(String channelId)
216217
engine.enableVideo();
217218
// Setup video encoding configs
218219
engine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
219-
VD_640x360,
220-
FRAME_RATE_FPS_15,
220+
((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingDimensionObject(),
221+
VideoEncoderConfiguration.FRAME_RATE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingFrameRate()),
221222
STANDARD_BITRATE,
222-
ORIENTATION_MODE_ADAPTIVE
223+
VideoEncoderConfiguration.ORIENTATION_MODE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingOrientation())
223224
));
224225

225226
/**Please configure accessToken in the string_config file.

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
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;
@@ -188,10 +189,10 @@ private void joinChannel(String channelId) {
188189
engine.enableVideo();
189190
// Setup video encoding configs
190191
engine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
191-
VD_640x360,
192-
FRAME_RATE_FPS_15,
192+
((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingDimensionObject(),
193+
VideoEncoderConfiguration.FRAME_RATE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingFrameRate()),
193194
STANDARD_BITRATE,
194-
ORIENTATION_MODE_ADAPTIVE
195+
VideoEncoderConfiguration.ORIENTATION_MODE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingOrientation())
195196
));
196197

197198
/**Please configure accessToken in the string_config file.

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.yanzhenjie.permission.AndPermission;
2020
import com.yanzhenjie.permission.runtime.Permission;
2121

22+
import io.agora.api.example.MainApplication;
2223
import io.agora.api.example.R;
2324
import io.agora.api.example.annotation.Example;
2425
import io.agora.api.example.common.BaseFragment;
@@ -211,10 +212,10 @@ private void joinChannel(String channelId) {
211212
engine.enableVideo();
212213
// Setup video encoding configs
213214
engine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
214-
VD_640x360,
215-
FRAME_RATE_FPS_15,
215+
((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingDimensionObject(),
216+
VideoEncoderConfiguration.FRAME_RATE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingFrameRate()),
216217
STANDARD_BITRATE,
217-
ORIENTATION_MODE_ADAPTIVE
218+
VideoEncoderConfiguration.ORIENTATION_MODE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingOrientation())
218219
));
219220

220221
/**Please configure accessToken in the string_config file.

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
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;
@@ -238,10 +239,10 @@ private void joinChannel(String channelId)
238239
engine.enableVideo();
239240
// Setup video encoding configs
240241
engine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
241-
VD_640x360,
242-
FRAME_RATE_FPS_15,
242+
((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingDimensionObject(),
243+
VideoEncoderConfiguration.FRAME_RATE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingFrameRate()),
243244
STANDARD_BITRATE,
244-
ORIENTATION_MODE_ADAPTIVE
245+
VideoEncoderConfiguration.ORIENTATION_MODE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingOrientation())
245246
));
246247

247248
/**Please configure accessToken in the string_config file.

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.yanzhenjie.permission.AndPermission;
2020
import com.yanzhenjie.permission.runtime.Permission;
2121

22+
import io.agora.api.example.MainApplication;
2223
import io.agora.api.example.R;
2324
import io.agora.api.example.annotation.Example;
2425
import io.agora.api.example.common.BaseFragment;
@@ -216,10 +217,10 @@ private void joinChannel(String channelId)
216217
engine.enableVideo();
217218
// Setup video encoding configs
218219
engine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
219-
VD_640x360,
220-
FRAME_RATE_FPS_15,
220+
((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingDimensionObject(),
221+
VideoEncoderConfiguration.FRAME_RATE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingFrameRate()),
221222
STANDARD_BITRATE,
222-
ORIENTATION_MODE_ADAPTIVE
223+
VideoEncoderConfiguration.ORIENTATION_MODE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingOrientation())
223224
));
224225

225226
/**Please configure accessToken in the string_config file.

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
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;
@@ -210,10 +211,10 @@ private void joinChannel(String channelId)
210211
engine.enableVideo();
211212
// Setup video encoding configs
212213
engine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
213-
VD_640x360,
214-
FRAME_RATE_FPS_15,
214+
((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingDimensionObject(),
215+
VideoEncoderConfiguration.FRAME_RATE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingFrameRate()),
215216
STANDARD_BITRATE,
216-
ORIENTATION_MODE_ADAPTIVE
217+
VideoEncoderConfiguration.ORIENTATION_MODE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingOrientation())
217218
));
218219

219220
/**Please configure accessToken in the string_config file.

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
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;
@@ -210,10 +211,10 @@ private void joinChannel(String channelId) {
210211
engine.enableVideo();
211212
// Setup video encoding configs
212213
engine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
213-
VD_640x360,
214-
FRAME_RATE_FPS_15,
214+
((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingDimensionObject(),
215+
VideoEncoderConfiguration.FRAME_RATE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingFrameRate()),
215216
STANDARD_BITRATE,
216-
ORIENTATION_MODE_ADAPTIVE
217+
VideoEncoderConfiguration.ORIENTATION_MODE.valueOf(((MainApplication)getActivity().getApplication()).getGlobalSettings().getVideoEncodingOrientation())
217218
));
218219

219220
/**Please configure accessToken in the string_config file.

0 commit comments

Comments
 (0)