๐Ÿ’ป AWS IVS ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•œ android broadcast application ๊ตฌํ˜„

ํ•ด๋‚˜ยท2022๋…„ 5์›” 15์ผ
0
post-thumbnail

๐Ÿ“ Amazon IVS Broadcast SDK: Android Guide ์—์„œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

1 AWS IVSโ“

IVS (Amazon Interactive Video Service)
AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ด€๋ฆฌํ˜• ๋ผ์ด๋ธŒ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค์ด๋‹ค.

์›น์ด๋‚˜ ์•ฑ์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์–ด AWS ์ฝ˜์†”์—์„œ ์ฑ„๋„์„ ์ƒ์„ฑํ•˜๊ณ , SDK๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„๋งŒ ํ•ด ์ค€๋‹ค๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ฒ„ํŠผ ๋ช‡ ๊ฐœ๋กœ ์•ฑ - ์•ฑ / ์•ฑ - ์›น ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ณ , ๋˜ ๊ทธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์‹œ์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

2 โœ… IVS ์‚ฌ์ „ ์„ค์ •

2.1 AWS ๊ณ„์ • ์ƒ์„ฑ

AWS IVS ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  AWS ๊ณ„์ •์ด ํ•„์š”ํ•˜๋‹ค. ๊ณ„์ • ์ƒ์„ฑ์€ ๊ฒฐ์ œ ์ˆ˜๋‹จ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ๋ณดํŽธ์ ์ธ ํšŒ์›๊ฐ€์ž… ๊ณผ์ •๊ณผ ๋™์ผํ•˜์—ฌ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š๊ธฐ๋„ ํ•˜๊ณ , ์„œ์น˜ํ•˜๋ฉด ๊ธˆ๋ฐฉ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žตํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

2.2 IAM ๊ถŒํ•œ ์„ค์ •

์—ฌ๊ธฐ์„œ IAM์ด๋ž€? ์„œ๋ฒ„๋‚˜, ์Šคํ† ๋ฆฌ์ง€ ๋“ฑ์˜ AWS ๋ฆฌ์†Œ์Šค๋“ค์„ ํ†ตํ•ฉํ•˜๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ AWS์˜ ์„œ๋น„์Šค์ด๋‹ค.

ํšŒ์›๊ฐ€์ž…์„ ๋งˆ์น˜๋ฉด AWS ROOT ๊ณ„์ •์„ ๋ถ€์—ฌ๋ฐ›์œผ๋ฉฐ, ์šฐ๋ฆฌ๊ฐ€ IVS ์ฑ„๋„์„ ์ƒ์„ฑํ•˜๊ณ  SDK๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” IAM ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  IVS ์ฑ„๋„ ์ƒ์„ฑ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•œ๋‹ค๋Š” ๋‚ด์šฉ์˜ ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋ฌด์Šจ ์†Œ๋ฆฌ์ธ์ง€... ํ•˜๋‚˜๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค?
๋ผ๊ณ  ํ•˜๋”๋ผ๋„ ๊ดœ์ฐฎ๋‹ค.

AWS์—์„œ๋Š” IVS ๊ด€๋ จ IAM ๊ถŒํ•œ ์„ค์ •์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ฅผ ์นœ์ ˆํ•˜๊ฒŒ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค! ์ด ๋‹จ๊ณ„์—์„œ๋Š” ํ•ด๋‹น ๊ฐ€์ด๋“œ๋ฅผ ๋ณด๋ฉฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ€๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

2.3 IVS ์ฑ„๋„ ์ƒ์„ฑ

IVS ์„œ๋น„์Šค์—์„œ๋Š” ์ˆ˜์ง‘ ์„œ๋ฒ„์™€ ์ŠคํŠธ๋ฆผ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์‹œ์ž‘ํ•œ๋‹ค. IVS ์ฑ„๋„์€ ์ด์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ๊ด€๋ จ๋œ ๊ตฌ์„ฑ ์ •๋ณด๋“ค์„ ์ €์žฅํ•˜๋Š”๊ณณ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•˜๋ƒ?

์ด ๋˜ํ•œ AWS์˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

์ด๊ฑด ๋‚ด๊ฐ€ ์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” IVS ์ฑ„๋„์ด๋‹ค. (์ผ๋ถ€ ์ •๋ณด๋Š” ๋ธ”๋ผ์ธ๋“œ ์ฒ˜๋ฆฌ)

์ฑ„๋„์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋ ‡๊ฒŒ ์ŠคํŠธ๋ฆฌ๋ฐ์— ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์ •๋ณด๋“ค์ด ์ €์žฅ๋˜๊ณ , ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆผ ํƒญ์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ๋˜๋Š” ํ™”๋ฉด์„ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ŠคํŠธ๋ฆผ ์„ธ์…˜์—์„œ๋Š” ์–ธ์ œ ์–ผ๋งˆ๋‚˜ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ง„ํ–‰ํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

IVS ๊ฐ€์ด๋“œ์—๋„ ์„ค๋ช…๋˜์–ด ์žˆ์ง€๋งŒ, ์ฑ„๋„์„ ์ƒ์„ฑํ•  ๋•Œ ์˜ต์…˜์„ ์„ ํƒํ•˜๋ฉด ์ŠคํŠธ๋ฆฌ๋ฐ ๋ผ์ด๋ธŒ ์˜์ƒ์„ ๋…นํ™”๋œ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜์—ฌ ๋ณด๊ด€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค!


์ด์ œ ์ •๋ง๋กœ ๊ธ€์˜ ์ œ๋ชฉ์ธ Android broadcast application ๊ตฌํ˜„ ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค!
์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์ฒจ๋ถ€ํ•˜๋ฉฐ ์„ค๋ช…ํ•  ์˜ˆ์ •์ด๊ณ , AWS์—์„œ๋„ SDK ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ ๋ฐ demo app ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋‹ˆ ๊ด€๋ จ ๋‚ด์šฉ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ํ•˜์ดํผ๋งํฌ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋ฉด ๋˜๊ฒ ๋‹ค.

3 ๐Ÿ“น APP ๊ตฌํ˜„ (Android Studio)

์‚ฌ์‹ค AWS์—์„œ ์ œ๊ณตํ•˜๋Š” android broadcast demo app ์ฝ”๋“œ(kotlin)๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜์—ฌ๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

(ํ•„์ž๋Š” ์ฝ”ํ‹€๋ฆฐ์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ java๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ƒฅ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด์„œ ์ƒˆ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค... ๐Ÿ˜น)

3.1 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

๋ชจ๋“ˆ์˜ build.gradle ํŒŒ์ผ์— ์žˆ๋Š” dependencies ๋ถ€๋ถ„์— ํ•˜๋‹จ์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

dependencies {
     implementation 'com.amazonaws:ivs-broadcast:1.4.0'
}

3.2 ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ƒ์„ฑ

์ƒํƒœ ์—…๋ฐ์ดํŠธ๋‚˜ ์ŠคํŠธ๋ฆฌ๋ฐ ๋””๋ฐ”์ด์Šค ๋ณ€๊ฒฝ ์•Œ๋ฆผ, ์˜ค๋ฅ˜ ๋ฐ ์„ธ์…˜ ์˜ค๋””์˜ค ์ •๋ณด๋ฅผ ์ˆ˜์‹  ๊ฐ€๋Šฅํ•œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ฝ”๋“œ์ด๋‹ค. ๋ฉ”์ธ ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ ์‹คํ–‰ํ•  ์˜ˆ์ •์ด์–ด์„œ MainActivity.java ํŒŒ์ผ ์•ˆ์— ํ•˜๋‹จ์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ๋‹ค.

BroadcastSession.Listener broadcastListener = new BroadcastSession.Listener() {
	@Override
	public void onStateChanged(@NonNull BroadcastSession.State state) {
	Log.d(TAG, "State=" + state);
	}

	@Override
	public void onError(@NonNull BroadcastException exception) {
	Log.e(TAG, "Exception: " + exception);
	}
};

3.3 CAMERA / AUDIO ๊ถŒํ•œ ์š”์ฒญ

์ŠคํŠธ๋ฆฌ๋ฐ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋””๋ฐ”์ด์Šค์˜ ์นด๋ฉ”๋ผ ๋ฐ ๋งˆ์ดํฌ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌ๋œ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์—†๋‹ค๋ฉด ๊ถŒํ•œ์„ ์š”์ฒญํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋™์ผํ•˜๊ฒŒ MainActivity.java ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

final String[] requiredPermissions = { Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO };
for (String permission : requiredPermissions) {
	if (ContextCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) {
		ActivityCompat.requestPermissions(MainActivity.this, requiredPermissions, 0x100);
        break;
	}
}

3.4 Broadcast Session ์ƒ์„ฑ

์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์„ธ์…˜์„ ์ƒ์„ฑํ•ด ์ค€๋‹ค.
ํ•˜๋‹จ์˜ ์ฝ”๋“œ๋Š” ํ›„๋ฉด ์นด๋ฉ”๋ผ๋ฅผ ์‚ฌ์šฉํ•œ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์›ํ•  ๋•Œ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

Context ctx = getApplicationContext();
BroadcastSession broadcastSession = new BroadcastSession(ctx, broadcastListener, Presets.Configuration.STANDARD_LANDSCAPE, Presets.Devices.BACK_CAMERA(ctx));

์ŠคํŠธ๋ฆฌ๋ฐ์— ํ•ธ๋“œํฐ์˜ ์ „๋ฉด ์นด๋ฉ”๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ•˜๋‹จ์˜ ์ฝ”๋“œ๋กœ ์ถ”๊ฐ€ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค!

Context ctx = getApplicationContext();
BroadcastSessionbroadcastSession = new BroadcastSession(ctx, broadcastListener, Presets.Configuration.STANDARD_PORTRAIT, Presets.Devices.FRONT_CAMERA(ctx));

3.5 ํ™”๋ฉด ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ‘œ์‹œ

์นด๋ฉ”๋ผ๋ฅผ ๋”ฑ ์ผฐ์„ ๋•Œ ๋ Œ์ฆˆ๋กœ ๋ณด์ด๋Š” ํ™”๋ฉด์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์–ด๋–ค ํ™”๋ฉด์ด ๋ณด์—ฌ์ง€๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด xml ํŒŒ์ผ์— LinearLayout์œผ๋กœ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ ˆ์ด์•„์›ƒ์„ ์ถ”๊ฐ€ํ•˜๊ณ , MainActivity.java ํŒŒ์ผ์—๋Š” ํ•˜๋‹จ์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

broadcastSession.awaitDeviceChanges(() -> {
    for(Device device: session.listAttachedDevices()) {
        if(device.getDescriptor().type == Device.Descriptor.DeviceType.CAMERA) {
            LinearLayout previewHolder = findViewById(R.id.previewHolder);
            ImagePreviewView preview = ((ImageDevice)device).getPreviewView();
            preview.setLayoutParams(new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT));
            previewHolder.addView(preview);
        }
    }
});

LinearLayout previewHolder = findViewById(R.id.previewHolder);

ํ•ด๋‹น ๋ถ€๋ถ„์€ ๋ณธ์ธ์ด xml ํŒŒ์ผ์˜ LinearLayout์— ์ถ”๊ฐ€ํ•ด ์ค€ id๋ฅผ ์ ์œผ๋ฉด ๋œ๋‹ค! ์žŠ์ง€ ๋ง๋„๋ก ํ•˜์ž.

3.6 Broadcast ์‹œ์ž‘

๊ฐ„๋‹จํ•˜๊ฒŒ ์ฝ”๋“œ ํ•œ ์ค„๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค!
URL ๋ถ€๋ถ„์—๋Š” IVS ์ฑ„๋„์˜ ์ˆ˜์ง‘ ์„œ๋ฒ„, STREAMKEY ๋ถ€๋ถ„์—๋Š” IVS ์ฑ„๋„์˜ ์ŠคํŠธ๋ฆผ ํ‚ค ์ •๋ณด๋ฅผ ๋ฐ›์•„์™€ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

broadcastSession.start(IVS_RTMPS_URL, IVS_STREAMKEY);

๋ฐฉ์†ก ์‹œ์ž‘ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ„์œผ๋กœ์จ ์ŠคํŠธ๋ฆฌ๋ฐ์ด ์‹œ์ž‘๋˜๋„๋ก ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ํ•„์ž๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ OnClickListener() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•ด ์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค. ์ถ”๊ฐ€๋กœ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ฐ„๋‹จํ•œ Toast message๊ฐ€ ํ•จ๊ป˜ ์ถœ๋ ฅ๋˜๋„๋ก ํ•˜์˜€๋‹ค.

Button broadbutton = (Button)findViewById(R.id.startbroad);

broadbutton.setOnClickListener(new View.OnClickListener(){
	@Override
	public void onClick(View v) {
		broadcastSession.start("rtmps://3c90cab980bd.global-contribute.live-video.net:443/app/", "sk_ap-northeast-2_yFcoiZCkIOLg_vKCoVZPK8UBYWahI8dUXOVUmQlwASj");
		Toast.makeText(ctx,"์ดฌ์˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค", Toast.LENGTH_SHORT).show();
		Toast.makeText(ctx,"๋„คํŠธ์›Œํฌ์™€ ์ „์› ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ด ์ฃผ์„ธ์š”", Toast.LENGTH_SHORT).show();
	}
});

3.7 Broadcast ์ข…๋ฃŒ

์ด์ „ ๊ณผ์ •๊ณผ ๋™์ผํ•˜๋‹ค. ์„ค๋ช…์€ ์ค„์ด๋„๋ก ํ•˜๊ฒ ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

broadcastSession.stop();

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋™์ž‘ํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด

Button stopbutton = (Button)findViewById(R.id.stopbroad);

stopbutton.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		broadcastSession.stop();
		Toast.makeText(ctx,"์ดฌ์˜์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค", Toast.LENGTH_SHORT).show();
	}
});

3.8 Broadcast Session ํ•ด์ œ

๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์„ธ์…˜์ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํ•˜๋‹จ์˜ ์ฝ”๋“œ๋ฅผ MainActivity.java ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด ์ฃผ์ž.

@Override
protected void onDestroy() {
    super.onDestroy();
    previewHolder.removeAllViews();
    broadcastSession.release();
}

๐Ÿ“ฑ ๊ตฌํ˜„ ์˜ˆ์‹œ


Android Studio ๋‚ด์˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์‹œ์ž‘ํ•˜๊ณ , AWS IVS ์„œ๋น„์Šค ์ฝ˜์†” ๋‚ด์˜ ๋‚ด ์ฑ„๋„์—์„œ ํ•ด๋‹น ์ŠคํŠธ๋ฆฌ๋ฐ์ด ์›ํ™œํ•˜๊ฒŒ ์ง„ํ–‰๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ณธ ๊ฒŒ์‹œ๊ธ€์—์„œ์˜ ์„ค๋ช…์€ ์—ฌ๊ธฐ๊นŒ์ง€์ด๋‹ค.

์œ„์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ, AWS์—์„œ๋„ ๊ณต์‹์ ์œผ๋กœ SDK ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ ๋ฐ demo app ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋‹ˆ ๊ด€๋ จ ๋‚ด์šฉ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ํ•˜์ดํผ๋งํฌ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋ฉด ๋˜๊ฒ ๋‹ค.

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 8์›” 24์ผ

Hi, where do you place the BroadcastSession var? Is it on oncreate or onstart? If you could upload the whole project l it would be great

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ