Dokumen ini menjelaskan fitur dan penggunaan Push SDK untuk Android, termasuk antarmuka utama SDK, alur kerja dasar, serta contoh implementasi untuk membantu pengembang memahami dan menggunakan SDK dalam streaming langsung.
Fitur
Mendukung ingest stream melalui Real-Time Messaging Protocol (RTMP).
Mendukung ingest dan penarikan stream RTS berbasis Real-Time Communication (RTC).
Mendukung co-streaming dan pertempuran.
Menggunakan H.264 untuk pengkodean video dan AAC untuk pengkodean audio.
Mendukung konfigurasi kustom untuk kontrol bitrate, resolusi, dan mode tampilan.
Mendukung berbagai operasi kamera.
Mendukung retouching real-time dan efek retouching kustom.
Memungkinkan Anda menambahkan dan menghapus stiker animasi sebagai watermark.
Memungkinkan Anda melakukan stream rekaman layar.
Mendukung input audio dan video eksternal dalam berbagai format seperti YUV dan pulse-code modulation (PCM).
Mendukung pencampuran beberapa stream.
Mendukung ingest stream hanya-audio dan hanya-video serta ingest stream di latar belakang.
Mendukung musik latar.
Mendukung tangkapan snapshot video.
Mendukung rekoneksi otomatis dan penanganan kesalahan.
Mendukung algoritma Automatic Gain Control (AGC), Automatic Noise Reduction (ANR), dan Acoustic Echo Cancellation (AEC).
Memungkinkan Anda beralih antara mode pengkodean perangkat lunak dan perangkat keras untuk file video, meningkatkan stabilitas modul pengkodean.
Batasan
Perhatikan batasan berikut sebelum menggunakan Push SDK untuk Android:
Anda harus mengonfigurasi orientasi layar sebelum ingest stream. Anda tidak dapat memutar layar selama streaming langsung.
Anda harus menonaktifkan rotasi layar otomatis untuk ingest stream dalam mode lanskap.
Dalam mode pengkodean perangkat keras, nilai resolusi output harus merupakan kelipatan dari 16 agar kompatibel dengan encoder. Misalnya, jika Anda mengatur resolusi menjadi 540p, resolusi output adalah 544 × 960. Sesuaikan ukuran layar pemain berdasarkan resolusi output untuk mencegah bilah hitam.
Referensi API
Prosedur
Prosedur dasarnya adalah sebagai berikut:
Penggunaan Fitur
Daftarkan SDK
Untuk informasi tentang cara mengajukan dan mengonfigurasi lisensi, lihat Integrasi lisensi untuk Push SDK.
Anda harus mendaftarkan SDK sebelum dapat menggunakan fitur ingest stream-nya.
Panggil metode pendaftaran lisensi lebih awal dalam siklus hidup aplikasi Anda, sebelum menggunakan Push SDK.
AlivcLiveBase.setListener(new AlivcLiveBaseListener() {
@Override
public void onLicenceCheck(AlivcLivePushConstants.AlivcLiveLicenseCheckResultCode result, String reason) {
Log.e(TAG, "onLicenceCheck: " + result + ", " + reason);
}
});
AlivcLiveBase.registerSDK();Kelas AlivcLiveBase memungkinkan Anda mengatur tingkat log, menentukan jalur log lokal, dan mengambil versi SDK.
Panggil metode registerSDK di AlivcLiveBase untuk mendaftarkan lisensi SDK.
Dalam metode onLicenceCheck dari antarmuka AlivcLiveBase#setListener, Anda dapat secara asinkron memeriksa apakah lisensi telah dikonfigurasi.
CatatanCallback ini hanya dipicu setelah instance pusher diinisialisasi.
Konfigurasikan parameter ingest stream
Parameter ingest stream dasar memiliki nilai default yang direkomendasikan untuk digunakan. Ini memungkinkan inisialisasi sederhana tanpa konfigurasi tambahan.
// Inisialisasi kelas konfigurasi ingest stream.
AlivcLivePushConfig mAlivcLivePushConfig = new AlivcLivePushConfig();
// Atur mode ingest stream. Defaultnya adalah mode ingest stream dasar.
mAlivcLivePushConfig.setLivePushMode(AlivcLiveMode.AlivcLiveBasicMode);
// Atur resolusi. Defaultnya adalah 540p.
mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
// Atur frame rate. Defaultnya adalah 20 fps.
mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_25);
// Atur Group of Pictures (GOP) pengkodean video. Unit: detik. Defaultnya adalah 2 detik.
mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_TWO);
// Aktifkan kontrol bitrate. Ini diaktifkan secara default.
mAlivcLivePushConfig.setEnableBitrateControl(true);
// Atur orientasi layar. Defaultnya adalah potret. Anda dapat mengatur perangkat ke lanskap dengan tombol home di kiri atau kanan.
mAlivcLivePushConfig.setPreviewOrientation(AlivcPreviewOrientationEnum.ORIENTATION_PORTRAIT);
// Atur mode pengkodean audio. Defaultnya adalah AAC-LC.
mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AAC_LC);
// Atur mode pengkodean video. Defaultnya adalah pengkodean perangkat keras.
mAlivcLivePushConfig.setVideoEncodeMode(AlivcEncodeModeEnum.Encode_MODE_HARD);
// Atur mode pengkodean audio. Defaultnya adalah pengkodean perangkat lunak.
mAlivcLivePushConfig.setAudioEncodeMode(AlivcEncodeModeEnum.Encode_MODE_SOFT);
// Atur jenis kamera. Defaultnya adalah kamera depan.
mAlivcLivePushConfig.setCameraType(AlivcLivePushCameraTypeEnum.CAMERA_TYPE_FRONT);
// Atur gambar untuk di-ingest saat aplikasi berjalan di latar belakang atau di-pause.
mAlivcLivePushConfig.setPausePushImage("TODO: Jalur Gambar");
// Atur gambar untuk di-ingest dalam kondisi jaringan buruk.
mAlivcLivePushConfig.setNetworkPoorPushImage("TODO: Jalur Gambar");Untuk performa optimal pada perangkat seluler dan untuk mengelola lebar pita jaringan, kami merekomendasikan mengatur resolusi menjadi 540p. Sebagian besar aplikasi streaming langsung utama menggunakan resolusi ini.
Jika Anda menonaktifkan kontrol bitrate, bitrate akan tetap pada bitrate awal. Itu tidak menyesuaikan secara otomatis antara target dan bitrate minimum. Jika kondisi jaringan tidak stabil, ini dapat menyebabkan stuttering pemutaran. Gunakan opsi ini dengan hati-hati.
Mengambil aliran kamera
Inisialisasi SDK.
Setelah Anda mengonfigurasi parameter ingest stream, gunakan metode init dari Push SDK untuk menginisialisasinya. Contoh kode berikut menunjukkan cara melakukannya:
AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher(); mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);CatatanAlivcLivePusher tidak mendukung beberapa instance. Setiap panggilan init harus memiliki panggilan destroy yang sesuai.
Daftarkan callback pratinjau.
Anda dapat mendaftarkan callback pratinjau menggunakan metode setLivePushInfoListener:
/** * Set notifikasi event ingest stream. * * @param infoListener Pendengar notifikasi. */ mAlivcLivePusher.setLivePushInfoListener(new AlivcLivePushInfoListener() { @Override public void onPreviewStarted(AlivcLivePusher pusher) { // Notifikasi bahwa pratinjau telah dimulai. } // Metode Override lainnya //.... //.... });Mulai pratinjau.
Setelah objek livePusher diinisialisasi dan callback dikonfigurasi, Anda dapat memulai pratinjau. Anda harus melewati SurfaceView untuk pratinjau Camera. Contoh kode berikut menunjukkan cara melakukannya:
mAlivcLivePusher.startPreview(mSurfaceView)// Mulai pratinjau. Anda juga dapat memanggil metode startPreviewAysnc secara asinkron jika diperlukan.Mulai ingest stream.
Tambahkan kode berikut di dalam metode callback onPreviewStarted.
mAlivcLivePusher.startPush(mPushUrl);CatatanURL ingest mendukung RTMP dan Streaming Real-Time (RTS) (artc://). Untuk informasi tentang cara mendapatkan URL ingest, lihat Hasilkan URL ingest dan streaming.
ApsaraVideo Live tidak mendukung ingest beberapa stream ke URL ingest yang sama secara bersamaan. Permintaan ingest stream kedua ditolak.
Metode ingest stream umum
Kontrol ingest stream mencakup memulai, menghentikan, memulai ulang, menjeda, dan melanjutkan stream, bersama dengan menghentikan pratinjau dan menghapus instans ingest stream. Anda dapat menambahkan tombol untuk melakukan operasi ini berdasarkan kebutuhan aplikasi Anda.
/* Anda dapat memanggil metode ini untuk menjeda stream aktif. Setelah Anda menjeda ingest stream, pratinjau video dan ingest stream video tetap pada frame terakhir, dan stream audio berlanjut. */
mAlivcLivePusher.pause();
/* Anda dapat memanggil metode ini untuk melanjutkan stream yang dijeda. Setelah Anda melanjutkan ingest stream, pratinjau audio dan video serta ingest stream kembali normal. */
mAlivcLivePusher.resume();
/* Anda dapat memanggil metode ini untuk menghentikan stream aktif. Setelah operasi selesai, ingest stream berhenti. */
mAlivcLivePusher.stopPush();
/* Anda dapat memanggil metode ini untuk menghentikan pratinjau hanya ketika pratinjau aktif. Memanggil metode ini pada stream aktif tidak berpengaruh. Setelah pratinjau berhenti, gambar pratinjau membeku pada frame terakhir. */
mAlivcLivePusher.stopPreview();
/* Anda dapat memanggil metode ini untuk memulai ulang ingest stream ketika stream aktif atau ketika Anda menerima callback Error apa pun. Dalam keadaan Error, Anda hanya dapat memanggil metode ini, reconnectPushAsync untuk menyambung kembali, atau destroy untuk menghapus ingest stream. Setelah operasi selesai, ingest stream dimulai ulang. Semua sumber daya dalam ALivcLivePusher, termasuk pratinjau dan ingest stream, dimulai ulang. */
mAlivcLivePusher.restartPush();
/* Anda dapat memanggil metode ini ketika stream aktif atau ketika Anda menerima callback Error terkait AlivcLivePusherNetworkDelegate. Dalam keadaan Error, Anda hanya dapat memanggil metode ini, restartPush untuk memulai ulang ingest stream, atau destroy untuk menghapus ingest stream. Setelah operasi selesai, ingest stream tersambung kembali ke URL RTMP. */
mAlivcLivePusher.reconnectPushAsync();
/* Setelah ingest stream dihancurkan, ingest stream dan pratinjau berhenti, dan gambar pratinjau dihapus. Semua sumber daya terkait AlivcLivePusher dihancurkan. */
mAlivcLivePusher.destroy();Operasi terkait kamera
Operasi terkait kamera tersedia selama ingest stream, jeda, dan penyambungan kembali. Anda dapat beralih kamera dan mengelola pengaturan untuk lampu kilat, fokus, zoom, dan gambar. Contoh kode berikut menunjukkan cara melakukannya:
/* Beralih antara kamera depan dan belakang. */
mAlivcLivePusher.switchCamera();
/* Nyalakan atau matikan lampu kilat. Anda tidak dapat menyalakan lampu kilat saat menggunakan kamera depan. */
mAlivcLivePusher.setFlash(true);
/* Sesuaikan fokus untuk memperbesar gambar yang ditangkap. Rentang zoom adalah [0, getMaxZoom()]. */
mAlivcLivePusher.setZoom(5);
/* Fokus manual. Fokus manual memerlukan dua parameter: 1. point: Koordinat titik untuk difokuskan. 2. autoFocus: Menentukan apakah akan mengaktifkan autofocus. Parameter ini hanya berlaku untuk operasi fokus saat ini. Perilaku autofocus berikutnya mengikuti pengaturan antarmuka autofocus yang disebutkan di atas. */
mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true);
/* Tetapkan apakah akan mengaktifkan autofocus. */
mAlivcLivePusher.setAutoFocus(true);
/* Tetapkan gambar. Ada dua antarmuka terkait gambar: PushMirror untuk gambar stream ingest dan PreviewMirror untuk gambar pratinjau. Pengaturan PushMirror hanya memengaruhi gambar pemutaran. Pengaturan PreviewMirror hanya memengaruhi gambar pratinjau. Keduanya tidak saling memengaruhi. */
mAlivcLivePusher.setPreviewMirror(false);
mAlivcLivePusher.setPushMirror(false);Anda hanya dapat memanggil antarmuka terkait kamera setelah pratinjau dimulai.
Ingest stream berbagi layar
Push SDK mendukung ingest stream berbagi layar. Sebelum mengonfigurasi berbagi layar, Anda harus menginisialisasi SDK, menyiapkan pratinjau, dan memulai ingest stream. Perekaman layar menggunakan MediaProjection, yang memerlukan Anda untuk meminta izin pengguna. Untuk mengaktifkan mode perekaman layar, lewatkan data yang dikembalikan dari permintaan izin melalui antarmuka ini. Secara default, kamera tidak diaktifkan selama perekaman layar.
Siapkan ingest stream berbagi layar
// resultData: Intent sistem untuk perekaman layar.
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);Atur rotasi layar
Dalam mode perekaman layar, Anda dapat mengatur sudut rotasi layar untuk mendukung perekaman lanskap dan potret. Contoh kode berikut menunjukkan cara melakukannya:
mAlivcLivePusher.setScreenOrientation(0);Anda harus mendengarkan event OrientationEventListener di lapisan aplikasi. Ketika orientasi layar berubah, lewatkan sudut rotasi baru ke antarmuka ini.
Atur perlindungan privasi
Ketika streamer perlu melakukan operasi sensitif, seperti memasukkan kata sandi selama perekaman layar, mereka dapat mengaktifkan fitur perlindungan privasi. Setelah operasi selesai, streamer dapat menonaktifkan perlindungan privasi. Contoh kode berikut menunjukkan cara melakukannya:
mAlivcLivePusher.pauseScreenCapture();// Aktifkan perlindungan privasi.
mAlivcLivePusher.resumeScreenCapture();// Nonaktifkan perlindungan privasi.Jika Anda menjeda perekaman layar dan telah mengatur setPausePushImage dalam konfigurasi, pemirsa akan melihat gambar setelah antarmuka ini dipanggil. Jika tidak, pemirsa akan melihat frame terakhir.
Ingest stream berbagi layar dan kamera
Saat mengingest stream berbagi layar, Anda dapat mengaktifkan kamera untuk mengingest stream berbagi layar dan kamera. Ada dua skenario untuk mengingest stream berbagi layar dan kamera:
Streamer memiliki pratinjau kamera.
Baik streamer maupun pemirsa dapat melihat feed kamera.
Streamer tidak memiliki pratinjau kamera.
Misalnya, selama siaran langsung game, streamer tidak ingin tampilan kamera menghalangi layar game. Namun, konten siaran langsung yang dilihat pemirsa mencakup feed kamera streamer.
Streamer memiliki pratinjau kamera
Setelah perekaman layar berhasil diaktifkan, panggil antarmuka untuk mengaktifkan atau menonaktifkan pratinjau kamera.
mAlivcLivePusher.startCamera(surfaceView);// Aktifkan pratinjau kamera.
mAlivcLivePusher.stopCamera();// Nonaktifkan pratinjau kamera.Dalam mode perekaman layar, kami sarankan Anda mengatur lebar dan tinggi surfaceView pratinjau kamera ke rasio 1:1. Dengan cara ini, Anda tidak perlu menyesuaikan surfaceView saat layar berputar.
Jika lebar dan tinggi tidak diatur ke rasio 1:1, Anda harus menyesuaikan rasio surfaceView saat layar berputar, lalu panggil stopCamera dan kemudian startCamera.
Jika streamer tidak memerlukan pratinjau, atur surfaceView ke null.
Streamer tidak memiliki pratinjau kamera
Ketika streamer tidak memerlukan pratinjau kamera tetapi pemirsa melakukannya, Anda dapat mengaktifkan pencampuran stream kamera.
mAlivcLivePusher.startCameraMix(x, y, w, h);// Aktifkan pencampuran stream kamera dan atur tata letak pencampuran dengan x, y, w, dan h.
mAlivcLivePusher.stopCameraMix();// Hentikan pencampuran stream kamera.Mode tampilan pratinjau
Push SDK mendukung tiga mode pratinjau. Mode tampilan pratinjau tidak memengaruhi ingest stream.
ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL: Pratinjau mengisi jendela. Jika rasio aspek video dan jendela berbeda, pratinjau menjadi terdistorsi.
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT: Pratinjau mempertahankan rasio aspek video. Jika rasio aspek video dan jendela berbeda, bilah hitam muncul di pratinjau.
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: Pratinjau dipotong untuk sesuai dengan rasio aspek jendela. Jika rasio aspek video dan jendela berbeda, bagian-bagian video dipotong.
Contoh kode berikut menunjukkan cara mengatur mode pratinjau:
mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);Pengambilan aliran gambar
Untuk meningkatkan pengalaman pengguna, Push SDK memungkinkan Anda mengingest gambar statis ketika aplikasi berada di latar belakang atau ketika bitrate terlalu rendah.
Ketika aplikasi dipindahkan ke latar belakang, ingest stream video dijeda secara default, dan hanya stream audio yang di-ingest. Selama waktu ini, Anda dapat mengingest gambar statis. Misalnya, Anda dapat menampilkan gambar yang bertuliskan, "Streamer is away for a moment and will be back soon".
mAlivcLivePushConfig.setPausePushImage("Jalur ke gambar PNG latar belakang");// Atur gambar untuk ingest stream latar belakang.Ketika jaringan buruk, Anda dapat mengonfigurasi SDK untuk mengingest gambar statis. Setelah Anda mengatur gambar, SDK secara otomatis mengingestnya ketika bitrate rendah terdeteksi, yang membantu menghindari stuttering stream video. Contoh kode berikut menunjukkan cara melakukannya:
mAlivcLivePushConfig.setNetworkPoorPushImage("Jalur ke gambar PNG jaringan buruk");// Atur gambar untuk di-ingest ketika jaringan buruk.Ingest stream hanya-audio
mAlivcLivePushConfig.setAudioOnly(true);Ingest stream audio dan video eksternal
Push SDK mendukung ingest audio dan video dari sumber eksternal, seperti file audio atau video.
Sebelum Anda dapat mengingest stream audio dan video eksternal, Anda harus mengaktifkan fitur input stream audio dan video kustom.
/**
* Parameter lainnya, seperti resolusi output, laju pengambilan sampel audio, dan jumlah saluran, diatur dalam file konfigurasi menggunakan setResolution, setAudioSampleRate, dan setAudioChannels.
*/
mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12,AlivcSoundFormat.SOUND_FORMAT_S16);Setelah Anda mengaktifkan fitur input stream audio dan video kustom, Anda dapat mengingest stream audio dan video eksternal.
Memasukkan aliran audio eksternal
/**
* Antarmuka ini tidak mengontrol waktu. Pemanggil perlu mengontrol waktu input frame audio.
*/
mAlivcLivePusher.inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts);Memasukkan aliran video eksternal
/**
* Antarmuka ini tidak mengontrol waktu. Pemanggil perlu mengontrol waktu input frame video.
*/
mAlivcLivePusher.inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);Konfigurasikan watermark
Push SDK menyediakan fitur untuk menambahkan watermark dan mendukung beberapa watermark pada satu stream. Gambar watermark harus berupa file PNG. Contoh kode berikut menunjukkan cara menambahkan watermark:
mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3);// Tambahkan watermark.Parameter x, y, dan width adalah nilai relatif. Misalnya, x=0.1 berarti koordinat x watermark berada pada 10% sumbu-x layar ingest. Jika resolusi ingest adalah 540 × 960, koordinat x watermark adalah 54.
Tinggi gambar watermark diskalakan secara proporsional berdasarkan nilai lebar input berdasarkan lebar dan tinggi aktual gambar watermark.
Untuk mengimplementasikan watermark teks, pertama-tama ubah teks menjadi gambar, lalu gunakan antarmuka ini untuk menambahkan watermark.
Atur kualitas video
Tiga mode kualitas video didukung: Prioritas Resolusi, Prioritas Kelancaran, dan Kustom.
Untuk mengatur kualitas video, Anda harus mengaktifkan kontrol bitrate: mAlivcLivePushConfig.setEnableBitrateControl(true);
Prioritas Resolusi (default)
Dalam mode Prioritas Resolusi, SDK secara internal mengonfigurasi parameter bitrate untuk memprioritaskan definisi video yang di-ingest.
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST);// Prioritas resolusiPrioritas Kelancaran
Dalam mode Prioritas Kelancaran, SDK secara internal mengonfigurasi parameter bitrate untuk memprioritaskan kelancaran video yang di-ingest.
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST);// Prioritas kelancaranMode Kustom
Dalam mode Kustom, SDK mengonfigurasi bitrate berdasarkan pengaturan pengembang. Saat Anda mengatur mode ke Kustom, Anda harus menentukan bitrate awal, minimum, dan target.
Bitrate target: Ketika jaringan baik, bitrate secara bertahap meningkat ke bitrate target untuk meningkatkan definisi video.
Bitrate minimum: Ketika jaringan buruk, bitrate secara bertahap menurun ke bitrate minimum untuk mengurangi stuttering video.
Bitrate awal: Bitrate pada awal streaming langsung.
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_CUSTOM);// Mode Kustom
mAlivcLivePushConfig.setTargetVideoBitrate(1000); // Bitrate target: 1.000 kbps
mAlivcLivePushConfig.setMinVideoBitrate(300); // Bitrate minimum: 300 kbps
mAlivcLivePushConfig.setInitialVideoBitrate(800); // Bitrate awal: 800 kbpsSaat Anda mengatur bitrate kustom, rujuk pengaturan yang direkomendasikan oleh Alibaba Cloud untuk mengonfigurasi bitrate. Untuk informasi lebih lanjut, lihat tabel berikut:
Tabel 1. Pengaturan yang direkomendasikan untuk mode Prioritas Resolusi
Resolusi | initialVideoBitrate | minVideoBitrate | targetVideoBitrate |
360p | 600 | 300 | 1.000 |
480p | 800 | 300 | 1.200 |
540p | 1.000 | 600 | 1.400 |
720p | 1.500 | 600 | 2.000 |
1080p | 1.800 | 1.200 | 2.500 |
Tabel 1. Pengaturan yang direkomendasikan untuk mode Prioritas Resolusi
Resolusi | initialVideoBitrate | minVideoBitrate | targetVideoBitrate |
360p | 400 | 200 | 600 |
480p | 600 | 300 | 800 |
540p | 800 | 300 | 1.000 |
720p | 1.000 | 300 | 1.200 |
1080p | 1.500 | 1.200 | 2.200 |
Resolusi adaptif
Resolusi adaptif secara dinamis menyesuaikan resolusi ingest. Saat fitur ini diaktifkan, resolusi secara otomatis diturunkan dalam kondisi jaringan buruk untuk meningkatkan kelancaran dan definisi video. Contoh kode berikut menunjukkan cara mengaktifkan fitur ini:
mAlivcLivePushConfig.setEnableAutoResolution(true); // Aktifkan resolusi adaptif. Secara default dinonaktifkan.Resolusi adaptif hanya berlaku saat mode kualitas video diatur ke Prioritas Resolusi atau Prioritas Kelancaran. Tidak efektif dalam mode Kustom.
Beberapa pemain mungkin tidak mendukung resolusi dinamis. Untuk menggunakan fitur resolusi adaptif, kami sarankan Anda menggunakan ApsaraVideo Player.
Musik latar
Push SDK menyediakan fitur musik latar, termasuk pemutaran, pencampuran, denoise, pemantauan in-ear, dan mute. Contoh kode berikut menunjukkan cara menggunakan fitur-fitur ini:
/* Mulai memutar musik latar. */
mAlivcLivePusher.startBGMAsync(mPath);
/* Hentikan pemutaran musik latar. Jika musik latar sedang diputar dan Anda perlu beralih lagu, cukup panggil antarmuka mulai musik latar. Anda tidak perlu menghentikan musik latar yang sedang diputar. */
mAlivcLivePusher.stopBGMAsync();
/* Jeda musik latar. Anda dapat memanggil antarmuka ini hanya setelah musik latar mulai diputar. */
mAlivcLivePusher.pauseBGM();
/* Lanjutkan musik latar. Anda dapat memanggil antarmuka ini hanya ketika musik latar dijeda. */
mAlivcLivePusher.resumeBGM();
/* Aktifkan putar ulang loop untuk musik. */
mAlivcLivePusher.setBGMLoop(true);
/* Atur saklar denoise. Setelah Anda mengaktifkan denoise, bagian suara non-manusia dari suara yang ditangkap difilter. Ini mungkin sedikit menekan suara manusia. Kami sarankan Anda membiarkan pengguna memilih apakah akan mengaktifkan fitur denoise. Secara default tidak digunakan. */
mAlivcLivePusher.setAudioDenoise(true);
/* Atur saklar pemantauan in-ear. Fitur pemantauan in-ear terutama digunakan dalam skenario KTV. Setelah Anda mengaktifkan pemantauan in-ear, streamer dapat mendengar suaranya sendiri di headphone. Setelah Anda mematikannya, streamer tidak dapat mendengar suaranya di headphone. Pemantauan in-ear tidak berfungsi tanpa headphone. */
mAlivcLivePusher.setBGMEarsBack(true);
/* Atur pencampuran untuk menyesuaikan volume musik latar dan suara manusia yang ditangkap. */
mAlivcLivePusher.setBGMVolume(50);// Atur volume musik latar.
mAlivcLivePusher.setCaptureVolume(50);// Atur volume suara manusia yang ditangkap.
/* Atur mute. Setelah Anda membisukan, baik input musik maupun suara manusia dibisukan. Untuk membisukan hanya musik atau suara manusia, gunakan antarmuka pengaturan volume pencampuran. */
mAlivcLivePusher.setMute(true);Anda dapat memanggil antarmuka terkait musik latar hanya setelah pratinjau dimulai.
Tangkap snapshot selama ingest stream
Push SDK menyediakan fitur untuk menangkap snapshot dari stream video lokal. Contoh kode berikut menunjukkan cara melakukannya:
// Tangkap snapshot dari stream video. Parameter: jumlah gambar yang akan ditangkap, interval antara setiap gambar, dan callback antarmuka.
pusher.snapshot(1, 1, new AlivcSnapshotListener() {
@Override
public void onSnapshot(Bitmap bmp) {
// Anda dapat menyimpan snapshot ke file PNG lokal. Berikut adalah contoh kode:
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 penguncian layar
Ketika aplikasi dipindahkan ke latar belakang atau layar dikunci, Anda dapat memanggil metode pause() atau resume() dari AlivcLivePusher untuk menjeda atau melanjutkan ingest stream.
Untuk panggilan audio dan video non-sistem, SDK menangkap dan mengingest suara. Anda dapat memanggil antarmuka mAlivcLivePusher.setMute(true atau false) ketika aplikasi dipindahkan ke latar belakang atau layar dikunci untuk mengontrol apakah audio ditangkap di latar belakang, berdasarkan kebutuhan aplikasi Anda.
Callback pendengar
Jenis callback | Nama kelas callback | Metode set |
AlivcLivePushInfoListener |
| |
AlivcLivePushNetworkListener |
| |
AlivcLivePushErrorListener |
| |
AlivcLivePushBGMListener |
|
Callback ingest stream
Callback ingest stream memberi tahu aplikasi Anda tentang status SDK, termasuk ketika pratinjau dimulai, frame video pertama dirender, frame audio atau video pertama dikirim, ingest stream dimulai, dan ingest stream dihentikan.
onPushStarted: menunjukkan bahwa koneksi ke server berhasil.
onFirstFramePushed: menunjukkan bahwa frame audio atau video pertama berhasil dikirim.
onPushStarted dan onFirstFramePushed: menunjukkan bahwa ingest stream SDK berhasil.
Callback terkait jaringan
Callback terkait jaringan memberi tahu aplikasi Anda tentang status jaringan dan koneksi SDK. SDK secara otomatis mencoba menyambung kembali selama fluktuasi jaringan singkat atau transisi jaringan yang berada dalam batas waktu rekoneksi dan jumlah percobaan ulang yang ditetapkan dalam AlivcLivePushConfig. Jika rekoneksi berhasil, ingest stream berlanjut.
onConnectFail: Menunjukkan bahwa ingest stream gagal. Hal ini dapat terjadi jika URL ingest tidak valid, berisi karakter tidak valid, memiliki masalah autentikasi, melebihi batas maksimum stream ingest bersamaan, atau ada dalam daftar hitam ingest stream. Sebelum Anda mencoba mengingest stream lagi, pastikan URL ingest valid dan tersedia. Kode kesalahan spesifik adalah 0x30020901 hingga 0x30020905 dan 0x30010900 hingga 0x30010901.
onConnectionLost: Callback untuk koneksi terputus. Setelah koneksi terputus, SDK secara otomatis memulai proses rekoneksi dan memicu onReconnectStart. Jika koneksi stream tidak dipulihkan setelah jumlah percobaan maksimum (config.connectRetryCount), SDK memicu onReconnectFail.
onNetworkPoor: Callback untuk jaringan lambat. Ketika Anda menerima callback ini, itu berarti jaringan saat ini tidak cukup untuk mendukung ingest stream. Pada saat ini, ingest stream masih berlangsung dan belum terganggu. Anda dapat menangani logika bisnis Anda di sini, seperti menampilkan notifikasi UI kepada pengguna.
onNetworkRecovery: Callback untuk pemulihan jaringan.
onReconnectFail: Metode ini dipanggil ketika durasi pemutusan jaringan melebihi batas waktu rekoneksi dan jumlah percobaan ulang yang ditetapkan dalam AlivcLivePushConfig, menyebabkan rekoneksi otomatis SDK gagal. Setelah jaringan pulih, Anda dapat memanggil antarmuka
mAlivcLivePusher.reconnectPushAsyncuntuk menyambung kembali.onSendDataTimeout: Callback untuk timeout pengiriman data. Anda harus memeriksa status jaringan saat ini. Ketika jaringan pulih, hentikan ingest stream saat ini dan kemudian mulai ulang.
onPushURLAuthenticationOverdue: Callback untuk autentikasi kedaluwarsa. Callback ini menunjukkan bahwa autentikasi untuk URL ingest saat ini telah kedaluwarsa. Anda harus memberikan URL baru ke SDK.
Callback kesalahan
onSystemError: Callback untuk pengecualian perangkat sistem. Anda harus menghancurkan mesin dan mencoba lagi.
onSDKError: Callback kesalahan SDK. Anda harus menanganinya secara berbeda berdasarkan kode kesalahan:
Jika kode kesalahan adalah 805438211, itu menunjukkan performa perangkat yang buruk dan laju pengkodean dan rendering frame yang rendah. Anda harus memberi tahu streamer dan menghentikan logika bisnis yang memakan waktu di lapisan aplikasi, seperti retouching tingkat lanjut dan animasi.
Anda harus menangani callback untuk ketika aplikasi tidak memiliki izin mikrofon atau kamera. Kode kesalahan untuk tidak memiliki izin mikrofon adalah 268455940, dan kode kesalahan untuk tidak memiliki izin kamera adalah 268455939.
Untuk semua kesalahan lainnya, catat untuk pemecahan masalah dan jangan lakukan operasi lainnya.
Callback musik latar
onOpenFailed: Gagal memulai musik latar. Periksa apakah jalur musik dan file yang dilewatkan ke antarmuka mulai musik latar benar. Anda dapat memanggil startBGMAsync untuk mencoba memutarnya lagi.
onDownloadTimeout: Timeout pemutaran musik latar. Ini sering terjadi ketika memutar musik latar dari URL jaringan. Anda harus meminta streamer untuk memeriksa status jaringan saat ini. Anda dapat memanggil startBGMAsync untuk mencoba memutarnya lagi.
Metode dan antarmuka umum
Metode umum
/* Dalam mode Kustom, pengguna dapat menyesuaikan bitrate minimum dan target secara real-time. */
mAlivcLivePusher.setTargetVideoBitrate(800);
mAlivcLivePusher.setMinVideoBitrate(400);
/* Periksa apakah autofocus didukung. */
mAlivcLivePusher.isCameraSupportAutoFocus();
/* Periksa apakah lampu kilat didukung. */
mAlivcLivePusher.isCameraSupportFlash();
/* Dapatkan status apakah ingest stream sedang berlangsung. */
mAlivcLivePusher.isPushing();
/* Dapatkan URL ingest. */
mAlivcLivePusher.getPushUrl();
/* Dapatkan informasi debugging kinerja ingest stream. Untuk parameter dan deskripsi spesifik kinerja ingest stream, lihat dokumentasi API atau komentar antarmuka. */
mAlivcLivePusher.getLivePushStatsInfo();
/* Dapatkan nomor versi. */
mAlivcLivePusher.getSDKVersion();
/* Atur tingkat log untuk menyaring informasi debugging yang diinginkan sesuai kebutuhan. */
mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll);
/* Dapatkan status SDK saat ini. */
mAlivcLivePusher.getCurrentStatus();
/* Dapatkan kode kesalahan terakhir. Jika tidak ada kesalahan, ia mengembalikan ALIVC_COMMON_RETURN_SUCCESS. */
mAlivcLivePusher.getLastError();Daftar antarmuka umum
Kelas | Deskripsi |
AlivcLivePushConfig | Konfigurasi awal ingest stream |
AlivcLivePusher | Kelas fitur ingest stream |
AlivcLivePusherErrorListener | Callback kesalahan |
AlivcLivePusherNetworkListener | Callback notifikasi terkait jaringan |
AlivcLivePusherInfoListener | Callback informasi terkait ingest stream |
AlivcLivePusherBGMListener | Callback musik latar |
AlivcLivePushCustomFilter | Callback filter kustom |
AlivcLivePushCustomDetect | Callback deteksi wajah kustom |
AlivcSnapshotListener | Callback snapshot |
Integrasi fitur retouching
Untuk menggunakan fitur retouching dalam Push SDK, Anda harus mengimpor pustaka retouching dan mengonfigurasi callback yang sesuai.
Untuk menggunakan fitur retouching, Anda harus mendapatkan lisensi untuk Queen SDK. Untuk instruksi, lihat Dapatkan lisensi untuk Queen SDK.
Impor pustaka retouching dan panel retouching menggunakan Maven. Tambahkan kode berikut ke file build.gradle proyek Anda. Untuk versi terbaru Queen SDK, lihat Demo terbaru:
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 fitur
live_beauty
Kelas abstrak dasar untuk retouching
queen_beauty
Kontrol UI dasar untuk retouching
Dapatkan pustaka plugin LiveBeauty.
Gunakan perintah
cloneuntuk mengunduh kode pustaka plugin dari jalur ini (LiveBeauty) ke mesin lokal Anda.git clone https://github.com/MediaBox-Demos/amdemos-android-live.gitBuka baris perintah di direktori root proyek Android Studio Anda. Jalankan kode berikut, lalu gunakan
File > New > Import Moduleuntuk mengimpor modulLiveBeautyke dalam proyek Android Anda.git submodule add https://github.com/MediaBox-Demos/amdemos-android-live.git ***/***/***CatatanDalam contoh kode, "***/***/***" mewakili lokasi tempat Anda ingin menempatkan modul
LiveBeauty.Dalam file
settings.gradleproyek, tambahkan jalur modul:include ':app', ':LiveBeauty', ':LiveBeauty:live_queenbeauty'CatatanDalam contoh kode, "app" mewakili modul utama.
Dalam file
build.gradlemodul utama, tambahkan dependensi pada modulLiveBeauty:dependencies { implementation project(':LiveBeauty') implementation project(':LiveBeauty:live_queenbeauty') }Klik
File > Sync Project with Gradle Files. Tunggu hingga Gradle selesai menyinkronkan. Setelah itu, Anda dapat menggunakan modulLiveBeauty.
Konfigurasikan modul UI plugin retouching.
Dalam file XML tata letak proyek Anda, tambahkan kontrol
QueenBeautyMenu. Sebagai 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" />Dalam Activity, inisialisasi
QueenBeautyMenu. Sebagai contoh:// Inisialisasi panel menu retouching. QueenMenuPanel beautyMenuPanel = QueenBeautyMenu.getPanel(context); beautyMenuPanel.onHideMenu(); beautyMenuPanel.onHideValidFeatures(); beautyMenuPanel.onHideCopyright(); // Tambahkan menu retouching ke tata letak. QueenBeautyMenu beautyBeautyContainerView = findViewById(R.id.beauty_beauty_menuPanel); beautyBeautyContainerView.addView(beautyMenuPanel);
Atur callback deteksi wajah dan retouching.
Untuk mengintegrasikan pustaka retouching pihak ketiga, Anda dapat mengatur callback setCustomDetect dan setCustomFilter.
Parameter data yang dikembalikan dalam fungsi callback customDetectProcess (long data, int width, int height, int rotation, int format, long extra) dari AlivcLivePushCustomDetect adalah pointer ke data yang ditangkap. Pustaka retouching pihak ketiga dapat mengenali atau memproses data dari pointer ini.
Parameter inputTexture yang dikembalikan dalam fungsi callback customFilterProcess (int inputTexture, int textureWidth, int textureHeight, long extra) dari AlivcLivePushCustomFilter adalah tekstur gambar. Pustaka retouching pihak ketiga dapat memproses tekstur ini. Untuk mengembalikan tekstur yang diproses, kembalikan ID teksturnya. Jika tidak, kembalikan inputTexture asli.
Catatan Penggunaan
Catat hal-hal berikut saat Anda menggunakan Push SDK untuk Android:
Item | Deskripsi |
Aturan obfuscation | Periksa aturan obfuscation. Pastikan nama paket terkait SDK ditambahkan ke daftar paket yang tidak diobfuscate. |
Pemanggilan metode |
|
FAQ
Stream ingest fails
Anda dapat menggunakan alat pemecahan masalah mandiri untuk memeriksa apakah URL ingest valid.
How do I obtain information about ingested streams?
Anda dapat pergi ke Manajemen Stream untuk melihat dan mengelola stream audio dan video yang di-ingest pada tab Active Streams.
How do I play a stream?
Setelah Anda memulai ingest stream, Anda dapat menggunakan pemain seperti ApsaraVideo Player, FFplay, atau VLC untuk menguji penarikan stream. Untuk informasi tentang cara mendapatkan URL pemutaran, lihat Hasilkan URL ingest dan streaming.