開始 - Amazon Interactive Video Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

開始

安裝程式庫

若要將 Amazon IVS Android 廣播程式庫新增到您的 Android 開發環境中,請將該程式庫新增到模組的 build.gradle 檔案,如下所示 (適用於 Amazon IVS 廣播 SDK 的最新版本):

repositories { mavenCentral() } dependencies { implementation 'com.amazonaws:ivs-broadcast:1.14.1' }

或者,若要手動安裝 SDK,請從此位置下載最新版本:

建立事件接聽程式

設定事件接聽程式可讓您接收狀態更新、裝置變更通知、錯誤和工作階段音訊資訊。

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); } };

請求權限

您的應用程式必須請求許可才能存取使用者的攝影機和麥克風。(這不限於 Amazon IVS;任何需要存取攝影機和麥克風的應用程式都必須如此)。

在這裡,我們檢查使用者是否已經授予權限,如果沒有則提出請求:

final String[] requiredPermissions = { Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO }; for (String permission : requiredPermissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { // If any permissions are missing we want to just request them all. ActivityCompat.requestPermissions(this, requiredPermissions, 0x100); break; } }

在這裡,我們取得使用者的回應:

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 0x100) { for (int result : grantResults) { if (result == PackageManager.PERMISSION_DENIED) { return; } } setupBroadcastSession(); } }

建立廣播工作階段

廣播介面是 com.amazonaws.ivs.broadcast.BroadcastSession。請使用預設集予以初始化,如下所示。如果在初始化期間發生任何錯誤 (例如轉碼器設定失敗),您的 BroadcastListener 會收到錯誤消息,broadcastSession.isReady 將為 false

重要:所有 Amazon IVS 廣播 SDK for Android 呼叫都必須在 SDK 執行個體化的執行緒上進行。來自不同執行緒的呼叫將導致 SDK 擲回嚴重錯誤並停止廣播

// Create a broadcast-session instance and sign up to receive broadcast // events and errors. Context ctx = getApplicationContext(); broadcastSession = new BroadcastSession(ctx, broadcastListener, Presets.Configuration.STANDARD_PORTRAIT, Presets.Devices.FRONT_CAMERA(ctx));

另請參閱建立廣播工作階段 (進階版)

設定 ImagePreviewView預覽

如果您想要顯示作用中攝影機裝置的預覽,請將裝置的預覽 ImagePreviewView 新增至您的視圖層次結構中:

// awaitDeviceChanges will fire on the main thread after all pending devices // attachments have been completed broadcastSession.awaitDeviceChanges(() -> { for(Device device: session.listAttachedDevices()) { // Find the camera we attached earlier 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); } } });

開始廣播

您在 GetChannel 端點的 ingestEndpoint 回應欄位中收到的主持人名稱必須具有 rtmps:// 前綴和 /app 後綴。完整的 URL 格式如下:rtmps://{{ ingestEndpoint }}/app

broadcastSession.start(IVS_RTMPS_URL, IVS_STREAMKEY);

Android 廣播 SDK 僅支援 RTMPS 擷取 (非不安全的 RTMP 擷取)。

停止廣播

broadcastSession.stop();

發布廣播工作階段

當不再使用廣播工作階段時,必須呼叫 broadcastSession.release() 方法,以釋放程式庫使用的資源。

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