Pelajari cara mendaftarkan, mengonfigurasi, dan menggunakan Push SDK untuk Android untuk pengambilan aliran langsung, termasuk contoh pengambilan kamera, berbagi layar, retouching, dan lainnya.
Fitur
Mendukung pengambilan aliran melalui Real-Time Messaging Protocol (RTMP).
Mendukung pengambilan dan penarikan aliran RTS berbasis Real-Time Communication (RTC).
Mendukung co-streaming dan battles.
Menggunakan H.264 untuk encoding video dan AAC untuk encoding audio.
Mendukung konfigurasi kustom untuk fitur seperti kontrol 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.
Memungkinkan streaming rekaman layar.
Mendukung input audio dan video eksternal dalam berbagai format seperti YUV dan pulse-code modulation (PCM).
Mendukung pencampuran beberapa aliran.
Mendukung pengambilan aliran hanya audio, hanya video, serta pengambilan aliran di latar belakang.
Mendukung musik latar.
Mendukung pengambilan tangkapan video.
Mendukung koneksi ulang otomatis dan penanganan error.
Mendukung algoritma Automatic Gain Control (AGC), Automatic Noise Reduction (ANR), dan Acoustic Echo Cancellation (AEC).
Memungkinkan peralihan antara mode encoding perangkat lunak dan perangkat keras untuk file video guna meningkatkan stabilitas modul encoding.
Batasan
Perhatikan batasan berikut sebelum menggunakan Push SDK untuk Android:
Anda harus mengonfigurasi orientasi layar sebelum pengambilan aliran. Rotasi layar tidak diperbolehkan selama live streaming.
Anda harus menonaktifkan rotasi layar otomatis saat melakukan pengambilan aliran dalam mode landscape.
Dalam mode encoding perangkat keras, 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 bilah hitam.
Referensi API
Prosedur
Penggunaan fitur
Daftarkan SDK
Untuk mendapatkan dan mengonfigurasi lisensi, integrasikan lisensi Push SDK.
Anda harus mendaftarkan SDK sebelum dapat menggunakan fitur pengambilan alirannya.
Panggil API pendaftaran lisensi lebih awal dalam siklus hidup aplikasi Anda, sebelum menggunakan Push SDK untuk Android.
AlivcLiveBase.setListener(new AlivcLiveBaseListener() {
@Override
public void onLicenceCheck(AlivcLivePushConstants.AlivcLiveLicenseCheckResultCode result, String reason) {
Log.e(TAG, "onLicenceCheck: " + result + ", " + reason);
}
});
AlivcLiveBase.registerSDK();
-
Gunakan kelas
AlivcLiveBaseuntuk mengatur tingkat log, menentukan path log lokal, dan mendapatkan versi SDK. -
Anda harus memanggil metode registerSDK di
AlivcLiveBaseuntuk mendaftarkan lisensi SDK. -
Implementasikan callback
onLicenceCheckpada antarmukaAlivcLiveBase#setListeneruntuk memverifikasi konfigurasi lisensi secara asinkron.CatatanCallback ini hanya dipicu setelah Anda menginisialisasi instans pusher.
Konfigurasi parameter pengambilan aliran
Parameter pengambilan aliran memiliki nilai default yang tidak memerlukan konfigurasi tambahan.
// Inisialisasi kelas konfigurasi pengambilan aliran.
AlivcLivePushConfig mAlivcLivePushConfig = new AlivcLivePushConfig();
// Atur mode pengambilan aliran. Default-nya adalah mode dasar.
mAlivcLivePushConfig.setLivePushMode(AlivcLiveMode.AlivcLiveBasicMode);
// Atur resolusi. Default-nya adalah 540p.
mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
// Atur laju frame. Default-nya adalah 25 fps.
mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_25);
// Atur ukuran GOP video encoding dalam detik. Default-nya adalah 2 detik.
mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_TWO);
// Aktifkan kontrol bitrate. Ini diaktifkan secara default.
mAlivcLivePushConfig.setEnableBitrateControl(true);
// Atur orientasi layar. Default-nya adalah portrait. Anda juga dapat mengaturnya ke landscape dengan tombol home di kiri atau kanan.
mAlivcLivePushConfig.setPreviewOrientation(AlivcPreviewOrientationEnum.ORIENTATION_PORTRAIT);
// Atur profil audio encoding. Default-nya adalah AAC-LC.
mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AAC_LC);
// Atur mode video encoding. Default-nya adalah encoding perangkat keras.
mAlivcLivePushConfig.setVideoEncodeMode(AlivcEncodeModeEnum.Encode_MODE_HARD);
// Atur mode audio encoding. Default-nya adalah encoding perangkat lunak.
mAlivcLivePushConfig.setAudioEncodeMode(AlivcEncodeModeEnum.Encode_MODE_SOFT);
// Atur jenis kamera. Default-nya adalah kamera depan.
mAlivcLivePushConfig.setCameraType(AlivcLivePushCameraTypeEnum.CAMERA_TYPE_FRONT);
// Atur gambar yang ditampilkan saat aplikasi berada di latar belakang atau pengambilan aliran dijeda.
mAlivcLivePushConfig.setPausePushImage("TODO: Image Path");
// Atur gambar yang ditampilkan dalam kondisi jaringan buruk.
mAlivcLivePushConfig.setNetworkPoorPushImage("TODO: Image Path");
-
Atur resolusi ke 540p untuk mencapai keseimbangan optimal antara performa perangkat dan bandwidth.
-
Menonaktifkan kontrol bitrate akan mengunci bitrate pada nilai awal tanpa menyesuaikan kondisi jaringan, yang dapat menyebabkan tersendat saat pemutaran.
Ambil aliran kamera
-
Inisialisasi.
Panggil metode
initsetelah mengonfigurasi parameter pengambilan aliran:AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher(); mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);CatatanAlivcLivePushertidak mendukung beberapa instans. Setiap panggilaninitharus diikuti oleh panggilandestroy. -
Daftarkan callback pratinjau.
Panggil metode
setLivePushInfoListeneruntuk mendaftarkan callback pratinjau:/** * Atur listener untuk notifikasi event pengambilan aliran. * * @param infoListener Listener notifikasi. */ mAlivcLivePusher.setLivePushInfoListener(new AlivcLivePushInfoListener() { @Override public void onPreviewStarted(AlivcLivePusher pusher) { // Notifikasi bahwa pratinjau telah dimulai. } // Metode override lainnya //.... //.... }); -
Mulai pratinjau.
Mulai pratinjau dengan meneruskan
SurfaceViewuntuk pratinjau kamera:mAlivcLivePusher.startPreview(mSurfaceView); // Memulai pratinjau. Anda juga dapat memanggil metode asinkron startPreviewAsync sesuai kebutuhan. -
Mulai pengambilan aliran.
Tambahkan kode berikut di dalam metode callback onPreviewStarted.
mAlivcLivePusher.startPush(mPushUrl);Catatan-
URL ingest untuk RTMP dan RTS (artc://) didukung. Untuk mendapatkan URL, lihat Hasilkan URL ingest dan streaming.
-
ApsaraVideo Live menolak permintaan pengambilan aliran bersamaan ke URL yang sama.
-
Metode pengambilan aliran umum
SDK menyediakan metode untuk mengontrol siklus hidup aliran: mulai, henti, jeda, lanjutkan, restart, sambung ulang, dan hapus.
/* Panggil untuk menjeda aliran yang sedang diambil. Setelah dijeda, pratinjau video dan pengambilan aliran video ditahan pada frame terakhir, sedangkan pengambilan aliran audio tetap berlanjut. */
mAlivcLivePusher.pause();
/* Panggil untuk melanjutkan aliran yang dijeda. Setelah dilanjutkan, pratinjau audio dan video serta pengambilan aliran kembali normal. */
mAlivcLivePusher.resume();
/* Panggil untuk menghentikan aliran yang sedang diambil. Setelah selesai, pengambilan aliran berhenti. */
mAlivcLivePusher.stopPush();
/* Panggil untuk menghentikan pratinjau saja saat berada dalam status pratinjau. Memanggil ini saat sedang mengambil aliran tidak berpengaruh. Setelah pratinjau berhenti, frame pratinjau membeku pada frame terakhir. */
mAlivcLivePusher.stopPreview();
/* Panggil untuk merestart pengambilan aliran saat aliran sedang diambil atau setelah menerima callback terkait error apa pun. Dalam status error, Anda hanya dapat memanggil API ini, reconnectPushAsync, atau destroy. Merestart akan menginisialisasi ulang semua resource internal AlivcLivePusher, termasuk pratinjau dan pengambilan aliran. */
mAlivcLivePusher.restartPush();
/* Panggil untuk menyambung ulang aliran saat sedang diambil atau setelah menerima callback error terkait AlivcLivePusherNetworkDelegate. Dalam status error, Anda hanya dapat memanggil API ini, restartPush, atau destroy. Menyambung ulang akan membangun kembali koneksi RTMP untuk pengambilan aliran. */
mAlivcLivePusher.reconnectPushAsync();
/* Panggil untuk menghapus instans pengambilan aliran. Setelah dihapus, pengambilan aliran dan pratinjau berhenti, serta surface pratinjau dihapus. Semua resource terkait AlivcLivePusher dilepaskan. */
mAlivcLivePusher.destroy();
Operasi kamera
Beralih kamera, mengaktifkan/menonaktifkan flash, serta menyesuaikan fokus, zoom, dan pencerminan selama pengambilan aliran, jeda, atau penyambungan ulang:
/* Beralih antara kamera depan dan belakang. */
mAlivcLivePusher.switchCamera();
/* Mengaktifkan atau menonaktifkan flash. Mengaktifkan flash tidak berpengaruh saat kamera depan aktif. */
mAlivcLivePusher.setFlash(true);
/* Menyesuaikan panjang fokus untuk memperbesar gambar yang diambil. Rentang zoom adalah [0, getMaxZoom()]. */
mAlivcLivePusher.setZoom(5);
/* Fokus manual kamera. Ini memerlukan dua parameter: 1. `point` (koordinat titik yang difokuskan) dan 2. `autoFocus` (apakah mengaktifkan autofokus untuk operasi ini). Perilaku autofokus berikutnya mengikuti nilai yang diatur oleh API setAutoFocus. */
mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true);
/* Atur apakah akan mengaktifkan autofokus. */
mAlivcLivePusher.setAutoFocus(true);
/* Konfigurasi pencerminan. Terdapat dua API pencerminan: PushMirror untuk aliran yang diambil dan PreviewMirror untuk pratinjau lokal. PushMirror hanya memengaruhi tampilan pemutaran, sedangkan PreviewMirror hanya memengaruhi tampilan pratinjau. Keduanya tidak saling memengaruhi. */
mAlivcLivePusher.setPreviewMirror(false);
mAlivcLivePusher.setPushMirror(false);
API kamera hanya tersedia setelah pratinjau dimulai.
Ambil aliran berbagi layar
Berbagi layar menggunakan MediaProjection dan memerlukan izin pengguna. Teruskan data hasil izin ke SDK. Kamera dinonaktifkan secara default selama berbagi layar.
Konfigurasi berbagi layar
// resultData adalah intent sistem berbagi layar.
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);
Konfigurasi rotasi layar
Atur sudut rotasi layar untuk mendukung perekaman landscape dan portrait selama berbagi layar:
mAlivcLivePusher.setScreenOrientation(0);
Anda perlu mendengarkan event OrientationEventListener di lapisan aplikasi dan mengatur sudut rotasi melalui API ini saat orientasi layar berubah.
Konfigurasi perlindungan privasi
Aktifkan perlindungan privasi selama berbagi layar untuk menyembunyikan input sensitif seperti kata sandi:
mAlivcLivePusher.pauseScreenCapture(); // Aktifkan perlindungan privasi.
mAlivcLivePusher.resumeScreenCapture(); // Nonaktifkan perlindungan privasi.
Ini menjeda berbagi layar. Jika setPausePushImage diatur dalam konfigurasi, pemirsa akan melihat gambar yang ditentukan. Jika tidak, pemirsa akan melihat frame terakhir sebelum jeda.
Ambil aliran kamera dan berbagi layar
Anda dapat mengaktifkan pengambilan kamera selama berbagi layar. Tersedia dua pendekatan:
-
Streamer memiliki pratinjau kamera.
Baik streamer maupun pemirsa dapat melihat feed kamera.
-
Streamer tidak memiliki pratinjau kamera.
Misalnya, selama streaming game, streamer mungkin tidak ingin tampilan kamera menghalangi permainan. Namun, pemirsa tetap dapat melihat feed kamera streamer dalam aliran akhir.
Streamer dapat melihat pratinjau kamera
Setelah berbagi layar dimulai, panggil API untuk memulai atau menghentikan pratinjau kamera.
mAlivcLivePusher.startCamera(surfaceView); // Mulai pratinjau kamera.
mAlivcLivePusher.stopCamera(); // Hentikan pratinjau kamera.
-
Atur rasio aspek
surfaceViewpratinjau kamera ke 1:1 untuk menghindari penyesuaian saat rotasi layar. -
Jika rasio aspek bukan 1:1, Anda harus menyesuaikan rasio
surfaceViewsaat layar berotasi, lalu memanggilstopCameradiikuti denganstartCamera. -
Jika streamer tidak memerlukan pratinjau, atur
surfaceviewke null.
Streamer tidak dapat melihat pratinjau kamera
Aktifkan pencampuran aliran kamera untuk menyertakan feed kamera dalam aliran tanpa pratinjau lokal.
mAlivcLivePusher.startCameraMix(x, y, w, h); // Aktifkan pencampuran aliran kamera dan atur tata letak x, y, w, dan h untuk aliran yang dicampur.
mAlivcLivePusher.stopCameraMix(); // Hentikan pencampuran aliran kamera.
Mode tampilan pratinjau
Tersedia tiga mode tampilan pratinjau. Mode tampilan tidak memengaruhi pengambilan aliran.
-
ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL: Video mengisi jendela pratinjau. Jika rasio aspek video dan jendela berbeda, pratinjau tampak terdistorsi.
-
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT: Rasio aspek video dipertahankan. Jika rasio aspek video dan jendela berbeda, bilah hitam muncul di pratinjau.
-
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: Video dipotong agar sesuai dengan rasio aspek jendela. Jika rasio aspek berbeda, video dipotong.
Kode berikut memberikan contoh:
mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);
Pengambilan aliran gambar
SDK dapat mengambil gambar placeholder saat aplikasi berada di latar belakang atau jaringan buruk.
Saat aplikasi masuk ke latar belakang, pengambilan video dijeda sementara audio tetap berlanjut. Tampilkan gambar placeholder untuk memberi tahu pemirsa:
mAlivcLivePushConfig.setPausePushImage("path/to/background.png"); // Atur gambar untuk pengambilan aliran latar belakang.
SDK mengambil gambar ini saat mendeteksi bitrate rendah, sehingga mengurangi tersendatnya video:
mAlivcLivePushConfig.setNetworkPoorPushImage("path/to/network_poor.png"); // Atur gambar yang diambil dalam kondisi jaringan buruk.
Pengambilan aliran hanya audio
mAlivcLivePushConfig.setAudioOnly(true);
Ambil aliran audio dan video eksternal
SDK mendukung pengambilan audio dan video dari sumber eksternal seperti file video.
Aktifkan input audio dan video kustom terlebih dahulu:
/**
* Parameter lain seperti resolusi output, laju sampel audio, dan jumlah channel diatur dalam objek konfigurasi
* menggunakan setResolution, setAudioSampleRate, dan setAudioChannels.
*/
mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12,AlivcSoundFormat.SOUND_FORMAT_S16);
Setelah mengaktifkan input audio dan video kustom, Anda dapat mengambil aliran eksternal.
Ambil aliran audio eksternal
/**
* API ini tidak mengontrol waktu. Pemanggil harus mengontrol waktu frame audio input.
*/
mAlivcLivePusher.inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts);
Ambil aliran video eksternal
/**
* API ini tidak mengontrol waktu. Pemanggil harus mengontrol waktu frame video input.
*/
mAlivcLivePusher.inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);
Konfigurasi watermark
Tambahkan satu atau beberapa watermark dalam format PNG:
mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3); // Tambahkan watermark.
-
Parameter x, y, dan lebar adalah nilai relatif. Misalnya, x=0.1 berarti koordinat x watermark berada di 10% dari lebar aliran. Jika resolusi aliran adalah 540x960, koordinat x watermark akan menjadi 54.
-
Tinggi gambar watermark diskalakan secara proporsional berdasarkan rasio aspek aslinya dan nilai lebar yang diberikan.
-
Untuk menerapkan watermark teks, pertama-tama ubah teks menjadi gambar, lalu gunakan API ini untuk menambahkannya sebagai watermark.
Konfigurasi kualitas video
Tiga mode kualitas video didukung: mode Prioritas Resolusi, mode Prioritas Kelancaran, dan mode Kustom.
Untuk mengatur kualitas video, Anda harus mengaktifkan kontrol bitrate: mAlivcLivePushConfig.setEnableBitrateControl(true);
Mode Prioritas Resolusi (default)
SDK memprioritaskan kejernihan video dengan mengonfigurasi parameter bitrate secara otomatis.
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST); // Prioritaskan resolusi.
Mode Prioritas Kelancaran
SDK memprioritaskan kelancaran video dengan mengonfigurasi parameter bitrate secara otomatis.
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST); // Prioritaskan kelancaran.
Mode Kustom
SDK menggunakan pengaturan bitrate Anda. Tentukan nilai bitrate awal, minimum, dan target.
-
Bitrate target: Dalam kondisi jaringan baik, bitrate secara bertahap meningkat ke bitrate target untuk meningkatkan kejernihan video.
-
Bitrate minimum: Dalam kondisi jaringan buruk, bitrate secara bertahap menurun ke bitrate minimum untuk mengurangi tersendatnya video.
-
Bitrate awal: Bitrate saat live streaming dimulai.
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_CUSTOM); // Mode kustom
mAlivcLivePushConfig.setTargetVideoBitrate(1000); // Bitrate target: 1.000 kbit/s
mAlivcLivePushConfig.setMinVideoBitrate(300); // Bitrate minimum: 300 kbit/s
mAlivcLivePushConfig.setInitialVideoBitrate(800); // Bitrate awal: 800 kbit/s
Lihat pengaturan bitrate yang direkomendasikan berikut:
Tabel 1. Pengaturan yang direkomendasikan untuk mode Prioritas Resolusi
Resolusi | initialVideoBitrate | minVideoBitrate | targetVideoBitrate |
360p | 600 | 300 | 1000 |
480p | 800 | 300 | 1200 |
540p | 1000 | 600 | 1400 |
720p | 1500 | 600 | 2000 |
1080p | 1800 | 1200 | 2500 |
Tabel 1. Pengaturan yang direkomendasikan untuk mode Prioritas Resolusi
Resolusi | initialVideoBitrate | minVideoBitrate | targetVideoBitrate |
360p | 400 | 200 | 600 |
480p | 600 | 300 | 800 |
540p | 800 | 300 | 1000 |
720p | 1000 | 300 | 1200 |
1080p | 1500 | 1200 | 2200 |
Resolusi adaptif
Resolusi adaptif secara otomatis menurunkan resolusi dalam kondisi jaringan buruk untuk meningkatkan kelancaran:
mAlivcLivePushConfig.setEnableAutoResolution(true); // Aktifkan resolusi adaptif. Default-nya false.
-
Resolusi adaptif hanya berfungsi dalam mode Prioritas Resolusi atau Prioritas Kelancaran, bukan dalam mode Kustom.
-
Beberapa pemutar tidak mendukung perubahan resolusi dinamis. Gunakan pemutar Alibaba Cloud untuk kompatibilitas.
Musik latar
SDK mendukung pemutaran musik latar, pencampuran, denoising, pemantauan in-ear, dan pembisuan:
/* Mulai memutar musik latar. */
mAlivcLivePusher.startBGMAsync(mPath);
/* Hentikan pemutaran musik latar. Jika BGM sedang diputar dan Anda perlu mengganti lagu, cukup panggil API mulai musik latar lagi. Anda tidak perlu menghentikan BGM saat ini. */
mAlivcLivePusher.stopBGMAsync();
/* Jeda musik latar. Ini hanya dapat dipanggil setelah BGM mulai diputar. */
mAlivcLivePusher.pauseBGM();
/* Lanjutkan musik latar. Ini hanya dapat dipanggil saat BGM dijeda. */
mAlivcLivePusher.resumeBGM();
/* Aktifkan pengulangan untuk musik latar. */
mAlivcLivePusher.setBGMLoop(true);
/* Atur sakelar denoise. Saat diaktifkan, suara non-manusia dalam audio yang diambil akan disaring. Ini mungkin sedikit meredam suara manusia. Kami merekomendasikan agar pengguna memilih apakah akan mengaktifkan fitur ini. Fitur ini dinonaktifkan secara default. */
mAlivcLivePusher.setAudioDenoise(true);
/* Atur sakelar pemantauan in-ear. Fitur ini terutama digunakan dalam skenario karaoke. Saat diaktifkan dengan headphone terpasang, streamer akan mendengar suaranya sendiri. Saat dinonaktifkan, mereka tidak akan mendengarnya. Ini tidak berpengaruh jika headphone tidak terpasang. */
mAlivcLivePusher.setBGMEarsBack(true);
/* Konfigurasi pencampuran untuk menyesuaikan volume musik latar dan suara yang diambil. */
mAlivcLivePusher.setBGMVolume(50); // Atur volume musik latar.
mAlivcLivePusher.setCaptureVolume(50); // Atur volume suara yang diambil.
/* Bisukan audio. Ini membisukan musik dan input suara. Untuk membisukan hanya musik atau suara, gunakan API penyesuaian volume pencampuran. */
mAlivcLivePusher.setMute(true);
API musik latar hanya tersedia setelah pratinjau dimulai.
Tangkapan aliran
Ambil tangkapan aliran video lokal:
// Ambil tangkapan aliran video. Parameter: jumlah gambar yang diambil, interval antar pengambilan dalam detik, dan listener callback.
pusher.snapshot(1, 1, new AlivcSnapshotListener() {
@Override
public void onSnapshot(Bitmap bmp) {
// Anda dapat menyimpan tangkapan ke file PNG lokal. Kode berikut adalah contoh.
String dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss-SS").format(new Date());
File f = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "snapshot-" + dateFormat + ".png");
if (f.exists()) {
f.delete();
}
try {
FileOutputStream out = new FileOutputStream(f);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
Berjalan di latar belakang dan kunci layar
-
Saat aplikasi Anda dipindahkan ke latar belakang atau layar dikunci, Anda dapat memanggil metode
pause()atauresume()dariAlivcLivePusheruntuk menjeda atau melanjutkan pengambilan aliran. -
Untuk panggilan audio dan video non-sistem, SDK menangkap dan mengambil suara. Berdasarkan kebutuhan bisnis Anda, Anda dapat memanggil API
mAlivcLivePusher.setMute(true or false)untuk menentukan apakah akan menangkap audio saat aplikasi berada di latar belakang atau layar dikunci.
Panggilan Balik
|
Jenis callback |
Nama kelas callback |
Metode pengaturan |
|
AlivcLivePushInfoListener |
|
|
|
AlivcLivePushNetworkListener |
|
|
|
AlivcLivePushErrorListener |
|
|
|
AlivcLivePushBGMListener |
|
Callback pengambilan aliran
Callback pengambilan aliran memberi tahu aplikasi tentang perubahan status SDK: mulai pratinjau, frame pertama dirender, frame pertama dikirim, mulai pengambilan, dan henti pengambilan.
-
onPushStarted: Menunjukkan koneksi berhasil ke server. -
onFirstFramePushed: Menunjukkan bahwa frame audio atau video pertama berhasil dikirim. -
Callback
onPushStarteddanonFirstFramePushedmenunjukkan bahwa SDK telah berhasil memulai pengambilan aliran.
Callback terkait jaringan
Callback jaringan melaporkan status koneksi. SDK melakukan koneksi ulang otomatis pada fluktuasi jaringan singkat dalam batas timeout dan percobaan ulang yang diatur di AlivcLivePushConfig.
-
onConnectFail: Pengambilan aliran gagal. Periksa URL ingest untuk validitas, masalah autentikasi, batas aliran bersamaan, atau status daftar blokir. Kode error: 0x30020901–0x30020905, 0x30010900–0x30010901. -
onConnectionLost: Koneksi terputus. SDK melakukan koneksi ulang otomatis, memicuonReconnectStart. Jika percobaan melebihiconfig.connectRetryCount,onReconnectFaildipicu. -
onNetworkPoor: Jaringan tidak mencukupi untuk pengambilan stabil tetapi aliran tidak terputus. Gunakan ini untuk menampilkan notifikasi UI. -
onNetworkRecovery: Jaringan telah pulih. -
onReconnectFail: Koneksi ulang otomatis gagal setelah melebihi batas timeout dan percobaan ulang di AlivcLivePushConfig. PanggilmAlivcLivePusher.reconnectPushAsyncuntuk menyambung ulang secara manual setelah jaringan pulih. -
onSendDataTimeout: Pengiriman data timeout. Periksa jaringan, lalu hentikan dan mulai ulang pengambilan aliran. -
onPushURLAuthenticationOverdue: Autentikasi URL ingest kedaluwarsa. Berikan URL baru ke SDK.
Callback kesalahan
-
onSystemError: Error sistem atau perangkat. Hapus engine dan coba lagi. -
onSDKError: Tangani berdasarkan kode error:-
Error 805438211: Performa perangkat buruk dengan laju frame encoding rendah. Beri tahu streamer dan hentikan operasi intensif sumber daya seperti retouching lanjutan.
-
Tangani error izin yang hilang: 268455940 (mikrofon) dan 268455939 (kamera).
-
Catat semua error lainnya.
-
Callback musik latar
-
onOpenFailed: Musik latar gagal dimulai. Verifikasi path dan format file, lalu panggilstartBGMAsynclagi. -
onDownloadTimeout: Pemutaran musik timeout, biasanya saat streaming dari URL. Periksa jaringan dan panggilstartBGMAsynclagi.
Metode dan API umum
Metode umum
/* Dalam mode Kustom, Anda dapat menyesuaikan bitrate minimum dan target secara real time. */
mAlivcLivePusher.setTargetVideoBitrate(800);
mAlivcLivePusher.setMinVideoBitrate(400);
/* Periksa apakah kamera mendukung autofokus. */
mAlivcLivePusher.isCameraSupportAutoFocus();
/* Periksa apakah kamera mendukung flash. */
mAlivcLivePusher.isCameraSupportFlash();
/* Dapatkan status pengambilan aliran saat ini. */
mAlivcLivePusher.isPushing();
/* Dapatkan URL ingest. */
mAlivcLivePusher.getPushUrl();
/* Dapatkan informasi performa dan debugging pengambilan aliran. Untuk detail parameter performa, lihat referensi API atau komentar antarmuka. */
mAlivcLivePusher.getLivePushStatsInfo();
/* Dapatkan nomor versi SDK. */
mAlivcLivePusher.getSDKVersion();
/* Atur tingkat log untuk memfilter informasi debugging sesuai kebutuhan. */
mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll);
/* Dapatkan status SDK saat ini. */
mAlivcLivePusher.getCurrentStatus();
/* Dapatkan kode error terakhir. Mengembalikan ALIVC_COMMON_RETURN_SUCCESS jika tidak ada error. */
mAlivcLivePusher.getLastError();
API umum
|
Kelas |
Deskripsi |
|
AlivcLivePushConfig |
Konfigurasi awal untuk pengambilan aliran. |
|
AlivcLivePusher |
Kelas untuk fitur pengambilan aliran. |
|
AlivcLivePusherErrorListener |
Callback untuk error. |
|
AlivcLivePusherNetworkListener |
Callback untuk notifikasi terkait jaringan. |
|
AlivcLivePusherInfoListener |
Callback untuk informasi pengambilan aliran. |
|
AlivcLivePusherBGMListener |
Callback untuk musik latar. |
|
AlivcLivePushCustomFilter |
Callback untuk filter kustom. |
|
AlivcLivePushCustomDetect |
Callback untuk pengenalan wajah kustom. |
|
AlivcSnapshotListener |
Callback untuk tangkapan. |
Integrasikan retouching
Impor library retouching dan konfigurasi callback untuk mengaktifkan retouching.
Retouching memerlukan lisensi untuk SDK retouching. Dapatkan lisensi untuk Queen SDK.
-
Impor library retouching melalui Maven. Tambahkan berikut ke file
build.gradleAnda. Periksa Demo terbaru untuk versi SDK.implementation "com.aliyun.maliang.android:queen:2.5.0-official-full" implementation("com.aliyun.maliang.android:queen_menu:2.5.0-official-full") { exclude group: 'com.aliyun.maliang.android', module: 'queen' }Anda juga dapat mengintegrasikan modul LiveBeauty dari demo:
File atau folder
Deskripsi
live_beauty
Kelas abstrak dasar untuk retouching.
queen_beauty
Kontrol UI dasar untuk retouching.
-
Dapatkan library plug-in retouching LiveBeauty.
-
Gunakan perintah
cloneuntuk mengunduh kode library plugin terkait dari path LiveBeauty ke mesin lokal Anda.git clone https://github.com/MediaBox-Demos/amdemos-android-live.git -
Buka command line di direktori root proyek Android Studio Anda. Jalankan kode berikut lalu gunakan
File > New > Import Moduleuntuk mengimpor modulLiveBeautyke proyek Android Anda.git submodule add https://github.com/MediaBox-Demos/amdemos-android-live.git ***/***/***CatatanDalam kode contoh, /*** adalah placeholder untuk path ke modul
LiveBeauty. -
Dalam file
settings.gradleproyek, tambahkan path modul:include ':app', ':LiveBeauty', ':LiveBeauty:live_queenbeauty'CatatanDalam kode contoh, "app" adalah modul utama.
-
Juga, dalam file
build.gradlemodul utama proyek, tambahkan dependensi pada modulLiveBeauty:dependencies { implementation project(':LiveBeauty') implementation project(':LiveBeauty:live_queenbeauty') } -
Klik
File > Sync Project with Gradle Files. Setelah sinkronisasi Gradle selesai, Anda dapat menggunakan modulLiveBeauty.
-
-
Konfigurasi modul UI plug-in retouching.
-
Tambahkan kontrol
QueenBeautyMenuke file layout XML proyek Anda. Contoh:<com.aliyunsdk.queen.menu.QueenBeautyMenu android:id="@+id/beauty_beauty_menuPanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" /> -
Inisialisasi
QueenBeautyMenudi Activity. Contoh:// Inisialisasi panel menu retouching. QueenMenuPanel beautyMenuPanel = QueenBeautyMenu.getPanel(context); beautyMenuPanel.onHideMenu(); beautyMenuPanel.onHideValidFeatures(); beautyMenuPanel.onHideCopyright(); // Tambahkan menu retouching ke layout. QueenBeautyMenu beautyBeautyContainerView = findViewById(R.id.beauty_beauty_menuPanel); beautyBeautyContainerView.addView(beautyMenuPanel);
-
-
Atur callback pengenalan wajah dan retouching.
Jika Anda perlu mengintegrasikan library retouching pihak ketiga, atur callback
setCustomDetectdansetCustomFilter.-
Dalam
customDetectProcess, parameterdataadalah pointer ke data yang diambil untuk pemrosesan pihak ketiga. -
Dalam
customFilterProcess, parameterinputTextureadalah tekstur gambar untuk diproses. Kembalikan ID tekstur yang telah diproses, atauinputTextureasli jika tidak dimodifikasi.
-
Catatan penggunaan
|
Item |
Deskripsi |
|
Aturan obfuscation |
Tambahkan nama paket SDK ke daftar pengecualian ProGuard Anda untuk mencegah masalah obfuscation.
|
|
Urutan pemanggilan API |
|
FAQ
Mengapa pengambilan aliran gagal?
Gunakan tool troubleshooting untuk memvalidasi URL ingest Anda.
Bagaimana cara mendapatkan informasi tentang aliran aktif?
Lihat dan kelola aliran aktif di halaman manajemen aliran.
Bagaimana cara menguji pemutaran aliran?
Uji pemutaran dengan pemutar Alibaba Cloud, FFplay, atau VLC setelah memulai pengambilan. Hasilkan URL ingest dan streaming.