本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
開始
安裝程式庫
若要將 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(); }