全部产品
Search
文档中心

ApsaraVideo Live:Penggunaan Fitur

更新时间:Nov 05, 2025

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

Referensi API untuk Edisi Dasar

Prosedur

Prosedur dasarnya adalah sebagai berikut:

  1. Daftarkan SDK

  2. Konfigurasikan parameter ingest stream

  3. Ingest stream

Penggunaan Fitur

Daftarkan SDK

Untuk informasi tentang cara mengajukan dan mengonfigurasi lisensi, lihat Integrasi lisensi untuk Push SDK.

Catatan

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.

    Catatan

    Callback 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");
Penting
  • 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

  1. 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);
    Catatan

    AlivcLivePusher tidak mendukung beberapa instance. Setiap panggilan init harus memiliki panggilan destroy yang sesuai.

  2. 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
        //....
        //....
    });

  3. 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.
  4. Mulai ingest stream.

    Tambahkan kode berikut di dalam metode callback onPreviewStarted.

    mAlivcLivePusher.startPush(mPushUrl);
    Catatan
    • URL 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);
Penting

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

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.
Catatan

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:

  1. Streamer memiliki pratinjau kamera.

    Baik streamer maupun pemirsa dapat melihat feed kamera.

  2. 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.
Catatan
  • 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.
Catatan
  • 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.

Penting

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 resolusi

Prioritas 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 kelancaran

Mode 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 kbps

Saat 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.
Penting
  • 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);
Penting

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

Callback ingest stream

AlivcLivePushInfoListener

mAlivcLivePusher.setLivePushInfoListener()

Callback terkait jaringan

AlivcLivePushNetworkListener

mAlivcLivePusher.setLivePushNetworkListener()

Callback kesalahan

AlivcLivePushErrorListener

mAlivcLivePusher.setLivePushErrorListener()

Callback musik latar

AlivcLivePushBGMListener

mAlivcLivePusher.setLivePushBGMListener()

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.reconnectPushAsync untuk 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.

Catatan

Untuk menggunakan fitur retouching, Anda harus mendapatkan lisensi untuk Queen SDK. Untuk instruksi, lihat Dapatkan lisensi untuk Queen SDK.

  1. 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

  2. Dapatkan pustaka plugin LiveBeauty.

    1. Gunakan perintah clone untuk mengunduh kode pustaka plugin dari jalur ini (LiveBeauty) ke mesin lokal Anda.

      git clone https://github.com/MediaBox-Demos/amdemos-android-live.git
    2. Buka baris perintah di direktori root proyek Android Studio Anda. Jalankan kode berikut, lalu gunakan File > New > Import Module  untuk mengimpor modul LiveBeauty ke dalam proyek Android Anda.

      git submodule add https://github.com/MediaBox-Demos/amdemos-android-live.git ***/***/***
      Catatan

      Dalam contoh kode, "***/***/***" mewakili lokasi tempat Anda ingin menempatkan modul LiveBeauty.

    3. Dalam file settings.gradle proyek, tambahkan jalur modul:

      include ':app', ':LiveBeauty', ':LiveBeauty:live_queenbeauty'
      Catatan

      Dalam contoh kode, "app" mewakili modul utama.

    4. Dalam file build.gradle modul utama, tambahkan dependensi pada modul LiveBeauty:

      dependencies {
          implementation project(':LiveBeauty')
          implementation project(':LiveBeauty:live_queenbeauty')
      }
    5. Klik File > Sync Project with Gradle Files. Tunggu hingga Gradle selesai menyinkronkan. Setelah itu, Anda dapat menggunakan modul LiveBeauty.

  3. Konfigurasikan modul UI plugin retouching.

    1. 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" />
    2. 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);
  4. 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.

    Contoh kode

    /**
     * Callback deteksi wajah.
     */
    mAlivcLivePusher.setCustomDetect(new AlivcLivePushCustomDetect() {
        @Override
        public void customDetectCreate() {
    
        }
    
        @Override
        public long customDetectProcess(long dataPtr, int width, int height, int rotation, int format, long extra) {
            return 0;
        }
    
        @Override
        public void customDetectDestroy() {
    
        }
    });
    
    /**
     * Callback retouching.
     */
     
     /**
     * Inisialisasi BeautyManager.
     */
    mAlivcLivePusher.setCustomFilter(new AlivcLivePushCustomFilter() {
        @Override
        public void customFilterCreate() {
            initBeautyManager();
        }
    
     /**
     * Proses stream video ingest dan tambahkan efek retouching.
     */
        @Override
        public int customFilterProcess(int inputTexture, int textureWidth, int textureHeight, long extra) {
            if (mBeautyManager == null) {
                return inputTexture;
            }
    
            return mBeautyManager.onTextureInput(inputTexture, textureWidth, textureHeight);
        }
    
        @Override
        public void customFilterDestroy() {
            destroyBeautyManager();
        }
    });

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.

-keep class com.alivc.** { *;}

Pemanggilan metode

  • Anda dapat memanggil metode sinkron dan asinkron. Kami sarankan Anda menggunakan metode asinkron untuk menghindari konsumsi sumber daya thread utama.

  • Metode SDK melempar pengecualian jika terjadi kesalahan atau jika mereka dipanggil dengan urutan yang salah. Tambahkan blok try-catch saat Anda memanggil metode untuk mencegah aplikasi crash.

  • Panggil metode sesuai dengan urutan yang ditunjukkan dalam gambar berikut:

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.