Topik ini menjelaskan cara menggunakan Push SDK untuk Flutter dengan contoh, mencakup antarmuka inti dan alur kerja dasarnya.
Fitur
Mendukung ingest stream melalui Real-Time Messaging Protocol (RTMP).
Mendukung ingest stream melalui Alibaba Real-Time Communication (ARTC) berbasis User Datagram Protocol (UDP).
Menggunakan H.264 untuk encoding video dan AAC untuk encoding audio.
Mendukung konfigurasi kustom untuk mengatur bitrate, resolusi, dan mode tampilan.
Mendukung berbagai operasi kamera.
Mendukung retouching real-time dan efek retouching kustom.
Memungkinkan penambahan dan penghapusan stiker animasi sebagai watermark.
Mendukung input audio dan video eksternal dalam berbagai format, seperti YUV dan pulse-code modulation (PCM).
Mendukung ingest stream hanya audio, hanya video, serta ingest stream di latar belakang.
Mendukung musik latar.
Mendukung pengambilan snapshot video.
Mendukung rekoneksi otomatis dan penanganan error.
Mendukung algoritma Automatic Gain Control (AGC), Automatic Noise Reduction (ANR), dan Acoustic Echo Cancellation (AEC).
Memungkinkan peralihan antara mode encoding software dan hardware untuk file video guna meningkatkan stabilitas modul encoding.
Batasan
Perhatikan batasan berikut sebelum menggunakan Push SDK untuk Flutter:
Anda harus mengonfigurasi orientasi layar sebelum ingest stream. Rotasi layar tidak diperbolehkan selama live streaming.
Anda harus menonaktifkan rotasi layar otomatis untuk ingest stream dalam mode landscape.
Dalam mode encoding hardware, nilai resolusi output harus merupakan kelipatan 16 agar kompatibel dengan encoder. Misalnya, jika Anda mengatur resolusi ke 540p, resolusi output menjadi 544 × 960. Anda harus menyesuaikan ukuran layar pemutar berdasarkan resolusi output untuk mencegah munculnya black bar.
Referensi API
Prosedur
Penggunaan fitur
Daftarkan SDK
Sebelum pendaftaran, Anda harus mengonfigurasi lisensi SDK. Push SDK untuk Flutter mendukung lisensi terpadu. Untuk mengajukan dan mengonfigurasi lisensi, lihat Integrasikan lisensi Push SDK.
Kemudian, daftarkan SDK sebelum ingest stream.
Daftarkan SDK.
AlivcLiveBase.registerSDK();Tetapkan listener untuk pendaftaran.
AlivcLiveBase.setListener(AlivcLiveBaseListener( onLicenceCheck: (AlivcLiveLicenseCheckResultCode result, String reason) { if (result == AlivcLiveLicenseCheckResultCode.success) { /// SDK telah didaftarkan. } }, ));
Konfigurasikan parameter stream ingest
Semua parameter dasar memiliki nilai default. Kami menyarankan Anda menggunakan nilai default tersebut.
/// Buat instans AlivcLivePusher.
AlivcLivePusher livePusher = AlivcLivePusher.init();
/// Buat objek Config untuk mengaitkan AlivcLivePushConfig dengan AlivcLivePusher.
livePusher.createConfig();
/// Buat instans AlivcLivePushConfig.
AlivcLivePushConfig pusherConfig = AlivcLivePushConfig.init();
/// Konfigurasikan parameter stream ingest.
/// Atur resolusi ke 540P.
pusherConfig.setResolution(AlivcLivePushResolution.resolution_540P);
/// Tentukan frame rate. Kami menyarankan Anda mengaturnya ke 20 frame per detik (FPS).
pusherConfig.setFps(AlivcLivePushFPS.fps_20);
/// Tentukan apakah akan mengaktifkan adaptive bitrate streaming. Nilai default adalah true.
pusherConfig.setEnableAutoBitrate(true);
/// Tentukan ukuran group of pictures (GOP). Nilai yang lebih besar menunjukkan latensi yang lebih tinggi. Kami menyarankan Anda mengaturnya ke angka antara 1 hingga 2.
pusherConfig.setVideoEncodeGop(AlivcLivePushVideoEncodeGOP.gop_2);
/// Tentukan durasi rekoneksi. Nilainya tidak boleh kurang dari 1000. Satuan: milidetik. Kami menyarankan Anda menggunakan nilai default.
pusherConfig.setConnectRetryInterval(2000);
/// Nonaktifkan mode mirroring untuk preview.
pusherConfig.setPreviewMirror(false);
/// Atur orientasi stream ke portrait.
pusherConfig.setOrientation(AlivcLivePushOrientation.portrait);Mulai pengambilan aliran
Buat engine livePusher.
livePusher.initLivePusher();Daftarkan listener untuk event ingest stream.
/// Tetapkan listener untuk status stream ingest. livePusher.setInfoDelegate(); /// Tetapkan listener untuk error stream ingest. livePusher.setErrorDelegate(); /// Tetapkan listener untuk status jaringan selama stream ingest. livePusher.setNetworkDelegate();Konfigurasikan callback terkait ingest stream.
/// Listener untuk error stream ingest /// Konfigurasikan callback untuk error SDK livePusher.setOnSDKError((errorCode, errorDescription) {}); /// Konfigurasikan callback untuk error sistem livePusher.setOnSystemError((errorCode, errorDescription) {}); /// Listener untuk status stream ingest /// Konfigurasikan callback untuk mulai preview livePusher.setOnPreviewStarted(() {}); /// Konfigurasikan callback untuk berhenti preview livePusher.setOnPreviewStoped(() {}); /// Konfigurasikan callback untuk rendering frame pertama livePusher.setOnFirstFramePreviewed(() {}); /// Konfigurasikan callback untuk mulai stream ingest livePusher.setOnPushStarted(() {}); /// Konfigurasikan callback untuk jeda stream ingest kamera livePusher.setOnPushPaused(() {}); /// Konfigurasikan callback untuk lanjutkan stream ingest kamera livePusher.setOnPushResumed(() {}); /// Konfigurasikan callback untuk restart stream ingest livePusher.setOnPushRestart(() {}); /// Konfigurasikan callback untuk akhir stream ingest livePusher.setOnPushStoped(() {}); /// Listener untuk status jaringan selama stream ingest /// Konfigurasikan callback untuk koneksi gagal livePusher.setOnConnectFail((errorCode, errorDescription) {}); /// Konfigurasikan callback untuk pemulihan jaringan livePusher.setOnConnectRecovery(() {}); /// Konfigurasikan callback untuk kehilangan koneksi livePusher.setOnConnectionLost(() {}); /// Konfigurasikan callback untuk koneksi jaringan buruk livePusher.setOnNetworkPoor(() {}); /// Konfigurasikan callback untuk rekoneksi gagal livePusher.setOnReconnectError((errorCode, errorDescription) {}); /// Konfigurasikan callback untuk mulai rekoneksi livePusher.setOnReconnectStart(() {}); /// Konfigurasikan callback untuk rekoneksi berhasil livePusher.setOnReconnectSuccess(() {});Buat tampilan preview untuk ingest stream.
var x = 0.0; // Nilai kustom var y = 0.0; // Nilai kustom var width = MediaQuery.of(context).size.width; // Nilai kustom var height = MediaQuery.of(context).size.height; // Nilai kustom AlivcPusherPreview pusherPreviewView = AlivcPusherPreview( onCreated: _onPusherPreviewCreated, x: x, y: y, width: width, height: height); return Container( color: Colors.black, width: width, height: height, child: pusherPreviewView);Mulai preview.
/// Callback untuk pembuatan preview _onPusherPreviewCreated(id) { /// Mulai preview livePusher.startPreview(); }CatatanJika orientasi layar proyek Flutter adalah portrait dan Anda memanggil setOrientation untuk mengatur orientasi layar ke landscape, video mungkin tidak mengisi jendela preview secara penuh setelah Anda membuat preview dan memanggil startPreview. Kami menyarankan Anda menambahkan jeda singkat sebelum memanggil startPreview.
Contohnya:
Future.delayed(Duration(milliseconds: 100));Mulai ingest stream. Anda hanya dapat memulai ingest stream setelah preview berhasil.
String pushURL = "URL ingest uji coba (rtmp://......)"; livePusher.startPushWithURL(pushURL);CatatanDidukung URL ingest RTMP dan RTS (artc://). Untuk menghasilkan URL ingest, lihat Hasilkan URL streaming.
ApsaraVideo Live tidak mendukung ingest multiple stream ke URL yang sama secara bersamaan. Permintaan ingest kedua akan ditolak.
Metode terkait ingest
/// Jeda stream ingest dari kamera. Anda dapat memanggil setPauseImg untuk mengonfigurasi citra yang ditampilkan selama jeda. Kemudian, panggil metode pause untuk beralih dari feed kamera ke citra yang ditentukan. Aliran audio tetap diingest.
livePusher.pause();
/// Lanjutkan stream ingest untuk beralih dari citra ke feed kamera. Aliran audio tetap diingest.
livePusher.resume();
/// Hentikan stream yang sedang diingest.
livePusher.stopPush();
/// Hentikan preview. Namun, operasi ini tidak berlaku untuk stream yang sedang diingest. Saat preview dihentikan, jendela preview membeku pada frame terakhir.
livePusher.stopPreview();
/* Restart stream ingest saat stream sedang diingest atau saat callback error diterima. Semua sumber daya dalam AlivcLivePusher diinisialisasi ulang, termasuk preview dan ingest. Jika terjadi error, Anda dapat memanggil metode ini atau metode reconnectPushAsync untuk merestart stream ingest. Anda juga dapat memanggil metode destroy untuk menghapus instans stream ingest. */
livePusher.restartPush();
/* Lakukan rekoneksi dan repush stream RTMP selama streaming atau dalam kondisi error jaringan (setNetworkDelegate). Dalam kondisi error, Anda juga dapat memanggil destroy untuk membuang instans.*/
livePusher.reconnectPushAsync();
/// Hentikan stream ingest dan preview. Setelah Anda memanggil metode ini, semua sumber daya terkait AlivcLivePusher dibuang.
livePusher.destory();Metode terkait kamera
/// Beralih antara kamera depan dan belakang.
livePusher.switchCamera();
/// Aktifkan atau nonaktifkan flash. Anda tidak dapat mengaktifkan flash untuk kamera depan.
livePusher.setFlash(false);
/// Sesuaikan panjang fokus untuk zoom in atau out. Jika Anda mengatur parameter input ke angka positif, sistem akan meningkatkan panjang fokus. Jika Anda mengatur parameter input ke angka negatif, sistem akan mengurangi panjang fokus.
double max = await livePusher.getMaxZoom();
livePusher.setZoom(min(1.0, max));
/// Konfigurasikan fokus manual.
/// Parameter autoFocus menentukan apakah akan mengaktifkan autofocus. Parameter ini hanya berlaku untuk pemanggilan ini. Apakah autofocus diaktifkan tergantung pada metode setAutoFocus.
double pointX = 50.0; // Nilai kustom
double pointY = 50.0; // Nilai kustom
bool autoFocus = true;
livePusher.focusCameraAtAdjustedPoint(pointX, pointY, autoFocus);
/// Nonaktifkan autofocus.
livePusher.setAutoFocus(false);
/// Nonaktifkan mode mirroring untuk preview.
livePusher.setPreviewMirror(false);
/// Nonaktifkan mode mirroring untuk stream ingest.
livePusher.setPushMirror(false);Mengimpor citra
Push SDK untuk Flutter mendukung ingest citra saat aplikasi dialihkan ke latar belakang atau dalam kondisi bitrate rendah.
Saat aplikasi dialihkan ke latar belakang, ingest stream video dijeda secara default, dan hanya aliran audio yang diingest. Streamer dapat menampilkan citra untuk memberi tahu penonton bahwa streamer sedang pergi dan akan segera kembali.
/// Tentukan citra yang diingest selama jeda.
String pauseImagePath = "xxxx"; // xxxx menentukan path citra.
pusherConfig.setPauseImg(pauseImagePath);Anda juga dapat menentukan citra yang akan diingest dalam kondisi jaringan buruk. Saat bitrate rendah, citra ditampilkan untuk mencegah stuttering. Contoh kode:
/// Tentukan citra yang diingest dalam kondisi jaringan buruk.
String networkPoorImagePath = "xxxx"; // xxxx menentukan path citra.
pusherConfig.setNetworkPoorImg(networkPoorImagePath);Konfigurasikan mode tampilan preview
Push SDK untuk Flutter mendukung mode preview berikut. Mode preview tidak memengaruhi ingest stream.
AlivcPusherPreviewDisplayMode.preview_scale_fill: Video mengisi jendela preview. Jika rasio aspek video dan jendela preview tidak konsisten, terjadi deformasi video.
AlivcPusherPreviewDisplayMode.preview_aspect_fit: Rasio aspek video dipertahankan. Jika rasio aspek berbeda, black bar muncul di jendela preview.
AlivcPusherPreviewDisplayMode.preview_aspect_fill: Video dipotong agar sesuai dengan jendela preview saat rasio aspek berbeda.
Contoh kode:
/// Atur mode tampilan preview.
pusherConfig.setPreviewDisplayMode(AlivcPusherPreviewDisplayMode.preview_aspect_fit);Konfigurasikan kualitas video
Push SDK untuk Flutter mendukung mode kualitas video berikut: Resolution Priority, Fluency Priority, dan custom.
Untuk mengonfigurasi kualitas video, Anda harus mengaktifkan kontrol bitrate: pusherConfig.setEnableAutoBitrate(true);
Resolution Priority (default)
Dalam mode ini, SDK secara otomatis mengonfigurasi parameter bitrate untuk memastikan kualitas video.
pusherConfig.setQualityMode(AlivcLivePushQualityMode.resolution_first);Fluency Priority
Dalam mode ini, SDK secara otomatis mengonfigurasi parameter bitrate untuk memastikan kelancaran aliran video yang diingest.
pusherConfig.setQualityMode(AlivcLivePushQualityMode.fluency_first);Mode custom
Dalam mode custom, SDK mengonfigurasi bitrate berdasarkan nilai yang Anda tentukan, termasuk bitrate awal, minimum, dan target.
TargetVideoBitrate: Dalam kondisi jaringan baik, bitrate secara bertahap ditingkatkan ke bitrate target untuk meningkatkan kualitas video.
MinVideoBitrate: Dalam kondisi jaringan buruk, bitrate secara bertahap dikurangi ke minimum untuk mencegah stuttering.
InitialVideoBitrate: Bitrate awal saat live stream dimulai.
pusherConfig.setQualityMode(AlivcLivePushQualityMode.custom);
pusherConfig.setInitialVideoBitrate(1000);
pusherConfig.setMinVideoBitrate(600);
pusherConfig.setTargetVideoBitrate(1400);Saat mengonfigurasi bitrate, rujuk pengaturan yang direkomendasikan oleh Alibaba Cloud:
Pengaturan yang direkomendasikan untuk mode Resolution Priority
Resolusi
Bitrate awal
Bitrate minimum
Target bitrate
360P
600
300
1000
480P
800
300
1200
540P
1000
600
1400
720P
1500
600
2000
1080P
1800
1200
2500
Pengaturan yang direkomendasikan untuk mode Resolution Priority
Resolusi
Bitrate awal
Bitrate minimum
Target bitrate
360P
400
200
600
480P
600
300
800
540P
800
300
1000
720P
1000
300
1200
1080P
1500
1200
2200
Konfigurasikan resolusi adaptif
SDK mendukung penyesuaian dinamis resolusi stream yang diingest. Saat fitur ini diaktifkan, resolusi secara otomatis dikurangi untuk memastikan kelancaran dan kualitas dalam kondisi jaringan buruk. Contoh kode:
/// Aktifkan resolusi adaptif。
pusherConfig.setEnableAutoResolution(true);Resolusi adaptif hanya berlaku saat mode kualitas video diatur ke Resolution Priority atau Fluency Priority.
Beberapa pemutar mungkin tidak mendukung resolusi dinamis. Kami menyarankan Anda menggunakan ApsaraVideo Player.
Konfigurasikan musik latar
/// Mulai pemutaran musik latar。
String musicPath = "xxxx"; // xxxx menentukan path tempat sumber daya musik disimpan.
livePusher.startBGMWithMusicPathAsync(musicPath);
/// Hentikan pemutaran musik latar. Jika Anda ingin mengganti musik latar, panggil metode yang digunakan untuk memulai pemutaran musik latar. Anda tidak perlu menghentikan pemutaran musik latar saat ini.
livePusher.stopBGMAsync();
/// Jeda pemutaran musik latar. Anda hanya dapat memanggil metode ini setelah pemutaran musik latar dimulai.
livePusher.pauseBGM();
/// Lanjutkan pemutaran musik latar. Anda hanya dapat memanggil metode ini setelah pemutaran musik latar dijeda.
livePusher.resumeBGM();
/// Aktifkan looping.
livePusher.setBGMLoop(true);
/// Konfigurasikan denoising. Saat diaktifkan, sistem menyaring bagian non-vokal dari audio yang dikumpulkan. Fitur ini mungkin sedikit mengurangi volume suara manusia. Kami menyarankan Anda membiarkan pengguna menentukan apakah akan mengaktifkan fitur ini. Secara default, fitur ini dinonaktifkan.
livePusher.setAudioDenoise(true);
/// Konfigurasikan in-ear monitoring. In-ear monitoring cocok untuk skenario karaoke. Saat diaktifkan, pengguna headphone dapat mendengar suaranya sendiri. Saat dinonaktifkan, mereka tidak dapat mendengar suaranya sendiri melalui headphone. Parameter ini tidak berlaku jika tidak ada headphone yang terdeteksi.
livePusher.setBGMEarsBack(true);
/// Tentukan volume musik latar dalam audio campuran.
livePusher.setBGMVolume(50); // Nilai valid: 0 hingga 100. Nilai default: 50
/// Tentukan volume suara manusia dalam audio campuran.
livePusher.setCaptureVolume(50); // Nilai valid: 0 hingga 100. Nilai default: 50
/// Konfigurasikan mute. Jika Anda mengaktifkan fitur ini, musik latar dan suara manusia dimute. Untuk mematikan suara musik latar atau suara manusia secara terpisah, panggil metode yang digunakan untuk mengonfigurasi volume.
livePusher.setMute(true);Konfigurasikan callback terkait musik latar:
/// Konfigurasikan callback untuk akhir pemutaran musik latar.
livePusher.setOnBGMCompleted(() {});
/// Konfigurasikan callback untuk timeout unduhan musik latar.
livePusher.setOnBGMDownloadTimeout(() {});
/// Konfigurasikan callback untuk pemutaran musik latar gagal.
livePusher.setOnBGMOpenFailed(() {});
/// Konfigurasikan callback untuk pemutaran musik latar dijeda.
livePusher.setOnBGMPaused(() {});
/// Konfigurasikan callback untuk progres pemutaran.
livePusher.setOnBGMProgress((progress, duration) {});
/// Konfigurasikan callback untuk pemutaran musik latar dilanjutkan.
livePusher.setOnBGMResumed(() {});
/// Konfigurasikan callback untuk mulai pemutaran musik latar.
livePusher.setOnBGMStarted(() {});
/// Konfigurasikan callback untuk berhenti pemutaran musik latar.
livePusher.setOnBGMStoped(() {});Ambil snapshot
/// Ambil snapshot.
String dir = "xxxx"; // xxxx menentukan path tempat snapshot disimpan.
if (Platform.isIOS) {
/// Parameter dir: Pada iOS, path adalah path relatif. Direktori kustom secara otomatis dibuat di sandbox sistem. Jika Anda mengatur parameter ini ke "", snapshot disimpan di direktori root sandbox sistem.
/// Parameter dirTypeForIOS: Opsional. Jika Anda tidak menentukan parameter ini, snapshot disimpan di direktori [document] sandbox sistem.
livePusher.snapshot(1, 0, dir, dirTypeForIOS: AlivcLiveSnapshotDirType.document);
} else {
livePusher.snapshot(1, 0, dir);
}
/// Tetapkan listener untuk pengambilan snapshot. Anda hanya dapat memanggil metode ini setelah memanggil snapshot.
livePusher.setSnapshotDelegate();
/// Konfigurasikan callback terkait pengambilan snapshot.
livePusher.setOnSnapshot((saveResult, savePath, {dirTypeForIOS}) {
// Callback yang dipicu saat snapshot disimpan.
if (saveResult == true) {
if (Platform.isIOS) {
// Bangun path lengkap snapshot di sandbox sistem. Format: dirTypeForIOS + savePath.
} else {
// Dapatkan path snapshot berdasarkan nilai savePath.
}
}
});Konfigurasikan watermark
Push SDK untuk Android mendukung penambahan satu atau beberapa watermark dalam format PNG. Contoh kode:
String watermarkBundlePath = "xxxx"; //xxxx menentukan path tempat citra watermark disimpan.
double coordX = 0.1;
double coordY = 0.1;
double width = 0.3;
/// Tambahkan watermark.
livePusher.addWatermark(watermarkBundlePath, coordX, coordY, width);Di mana:
coordX dan coordY adalah nilai relatif yang menentukan posisi watermark. coordX=0.1 berarti tepi kiri watermark diposisikan pada 10% dari lebar stream. Saat resolusi adalah 540 x 960, posisi x adalah 540 x 0.1 = 54 piksel.
width menentukan lebar watermark relatif terhadap lebar stream. Tinggi diskalakan secara proporsional.
Untuk menambahkan watermark teks, ubah teks menjadi citra PNG, lalu panggil metode ini untuk menambahkan citra sebagai watermark.
Untuk memastikan kejelasan dan kelancaran tepi watermark, kami menyarankan Anda menggunakan citra sumber yang berukuran sama dengan konfigurasi Anda. Misalnya, jika resolusi video output adalah 544 × 940 dan lebar watermark diatur ke 0.1f, lebar citra sumber yang direkomendasikan adalah 544 × 0.1f = 54.4 piksel.
Push sumber audio/video eksternal
Push SDK untuk Android mendukung ingest sumber audio/video eksternal, seperti file video.
Sebelum ingest, aktifkan input audio dan video kustom.
/// Aktifkan input audio dan video kustom.
pusherConfig.setExternMainStream(true);
/// Tentukan format warna untuk data video. Dalam contoh ini, digunakan YUVNV21. Anda juga dapat menggunakan format lain sesuai kebutuhan bisnis Anda.
pusherConfig.setExternVideoFormat(AlivcLivePushVideoFormat.YUVNV21);
/// Tentukan format kedalaman bit untuk data audio. Dalam contoh ini, digunakan S16. Anda juga dapat menggunakan format lain sesuai kebutuhan bisnis Anda.
pusherConfig.setExternMainStream(AlivcLivePushAudioFormat.S16);Setelah Anda mengaktifkan input stream audio dan video kustom, Anda dapat melakukan push stream audio dan video eksternal.
Push data video eksternal
/// Hanya data buffer kontinu dalam format YUV atau RGB yang dapat dikirim menggunakan metode sendVideoData. Anda dapat menentukan buffer video, panjang, lebar, tinggi, timestamp, dan sudut rotasi.
Uint8List bufferData = xxxx; // xxxx menunjukkan data buffer video kontinu dalam format Uint8List.
int width = 720; // Lebar video.
int height = 1280; // Tinggi video.
int dataSize = xxxx; // xxxx menunjukkan ukuran data.
int pts = xxxx; // xxxx menunjukkan timestamp dalam mikrodetik.
int rotation = 0; // Sudut rotasi.
livePusher.sendVideoData(bufferData, width, height, size, pts, rotation);Push data audio eksternal
/// Hanya data buffer kontinu dalam format PCM yang dapat dikirim menggunakan metode sendPCMData. Anda dapat menentukan buffer audio, panjang, dan timestamp.
Uint8List bufferData = xxxx; // xxxx menunjukkan data buffer audio kontinu dalam format Uint8List.
int dataSize = xxxx; // xxxx menunjukkan ukuran data.
int sampleRate = xxxx; // xxxx menunjukkan laju sampel audio.
int channel = 0; // Jumlah saluran suara.
int pts = xxxx; // xxxx menunjukkan timestamp dalam mikrodetik.
livePusher.sendPCMData(bufferData, size, sampleRate, channel, pts);Dapatkan nomor versi native Push SDK
/// Dapatkan nomor versi native Push SDK.
String sdkVersion = await AlivcLiveBase.getSdkVersion();Konfigurasikan log
/// Aktifkan pencetakan log di console.
AlivcLiveBase.setConsoleEnable(true);
/// Atur tingkat log ke Debug.
AlivcLiveBase.setLogLevel(AlivcLivePushLogLevel.debug);
/// Tentukan ukuran maksimum setiap shard. Ukuran total log adalah lima kali ukuran shard maksimum.
const int saveLogMaxPartFileSizeInKB = 100 * 1024 * 1024;
/// Path log.
String saveLogDir = "TODO";
/// Tentukan path log dan ukuran shard log。
AlivcLiveBase.setLogPath(saveLogDir, saveLogMaxPartFileSizeInKB);Reset objek config (iOS)
Anda dapat memanggil metode ini untuk menghapus pengaturan dalam objek Config saat Anda tidak menggunakan AlivcLivePushConfig di iOS. Pengaturan default akan dipulihkan untuk penggunaan berikutnya saat Anda membuat AlivcLivePusher.
Kami menyarankan Anda memanggil metode ini setelah memanggil metode destroy untuk AlivcLivePusher.
/// Reset objek Config di iOS.
livePusher.destroyConfigForIOS();Tambahkan efek retouching
Push SDK untuk Flutter menyediakan efek retouching melalui plugin. Untuk menggunakan fitur retouching, temukan plugin flutter_livepush_beauty_plugin di direktori example\plugins paket SDK.
Plugin retouching tidak dirilis secara terpisah.
/// 1. Inisialisasi objek retouching.
AlivcLiveBeautyManager beautyManager = AlivcLiveBeautyManager.init();
beautyManager.setupBeauty();
/// 2. Tampilkan panel retouching.
beautyManager.showPanel();
/// 3. Tutup panel retouching (untuk Android).
beautyManager.hidePanel();
/// 4. Buang objek retouching.
beautyManager.destroyBeauty();FAQ
Bagaimana cara troubleshooting kegagalan ingest stream?
Anda dapat menggunakan tool troubleshooting untuk memeriksa apakah URL ingest valid.
Bagaimana cara mendapatkan informasi tentang stream yang diingest?
Buka halaman Manajemen Stream dan lihat stream audio dan video yang diingest di Active Streams.
Bagaimana cara memutar stream?
Setelah Anda memulai pengambilan aliran, Anda dapat menggunakan pemutar (seperti ApsaraVideo Player, FFplay, atau VLC) untuk menguji penarikan aliran. Untuk mendapatkan URL pemutaran, lihat Hasilkan URL streaming.