All Products
Search
Document Center

ApsaraVideo Live:Gunakan Push SDK untuk Android

Last Updated:Aug 06, 2026

Pelajari cara mendaftarkan, mengonfigurasi, dan menggunakan Push SDK untuk Android guna melakukan pengambilan aliran langsung, lengkap dengan contoh pengambilan kamera, berbagi layar, retouching, dan lainnya.

Fitur

  • Mendukung pengambilan aliran melalui Real-Time Messaging Protocol (RTMP).

  • Mendukung pengambilan dan penarikan aliran RTS berdasarkan Real-Time Communication (RTC).

  • Mendukung co-streaming dan battles.

  • Menggunakan H.264 untuk pengkodean video dan AAC untuk pengkodean 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 Anda menambahkan dan menghapus stiker animasi sebagai watermark.

  • Memungkinkan Anda melakukan 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 dan 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 Anda beralih antara mode pengkodean perangkat lunak dan perangkat keras untuk file video, sehingga meningkatkan stabilitas modul penyandi.

Batasan

Perhatikan batasan berikut sebelum menggunakan Push SDK untuk Android:

  • Anda harus mengonfigurasi orientasi layar sebelum pengambilan aliran dan tidak boleh memutar layar selama live streaming.

  • Anda harus menonaktifkan rotasi layar otomatis untuk pengambilan aliran dalam mode landscape.

  • Dalam mode pengkodean 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

Referensi API (Edisi Dasar)

Prosedur

  1. Daftarkan SDK

  2. Konfigurasikan parameter pengambilan aliran

  3. Mulai pengambilan aliran

Penggunaan fitur

Daftarkan SDK

Untuk mendapatkan dan mengonfigurasi lisensi, integrasikan lisensi Push SDK.

Catatan

Anda harus mendaftarkan SDK sebelum dapat menggunakan fitur pengambilan alirannya.

Panggil API pendaftaran lisensi sedini mungkin 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 AlivcLiveBase untuk mengatur tingkat log, menentukan path log lokal, dan mendapatkan versi SDK.

  • Anda harus memanggil metode registerSDK di AlivcLiveBase untuk mendaftarkan lisensi SDK.

  • Implementasikan callback onLicenceCheck pada antarmuka AlivcLiveBase#setListener untuk memverifikasi konfigurasi lisensi secara asinkron.

    Catatan

    Callback ini hanya dipicu setelah Anda menginisialisasi instans pusher.

Konfigurasikan 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 pengkodean video dalam detik. Default-nya adalah 2 detik.
mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_TWO);
// Aktifkan kontrol bitrate. Fitur 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 pengkodean audio. Default-nya adalah AAC-LC.
mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AAC_LC);
// Atur mode pengkodean video. Default-nya adalah pengkodean perangkat keras.
mAlivcLivePushConfig.setVideoEncodeMode(AlivcEncodeModeEnum.Encode_MODE_HARD);
// Atur mode pengkodean audio. Default-nya adalah pengkodean 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");
Penting
  • Atur resolusi ke 540p untuk keseimbangan optimal antara performa perangkat dan bandwidth.

  • Menonaktifkan kontrol bitrate akan mempertahankan bitrate pada nilai awal tanpa menyesuaikan kondisi jaringan, yang dapat menyebabkan tersendat saat pemutaran.

Ambil aliran kamera

  1. Inisialisasi.

    Panggil metode init setelah mengonfigurasi parameter pengambilan aliran:

    AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher();
    mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);
    Catatan

    AlivcLivePusher tidak mendukung beberapa instans. Setiap panggilan init harus dipasangkan dengan panggilan destroy.

  2. Daftarkan callback pratinjau.

    Panggil metode setLivePushInfoListener untuk 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
        //....
        //....
    });
  3. Mulai pratinjau.

    Mulai pratinjau dengan meneruskan SurfaceView untuk pratinjau kamera:

    mAlivcLivePusher.startPreview(mSurfaceView); // Memulai pratinjau. Anda juga dapat memanggil metode asinkron startPreviewAsync sesuai kebutuhan.
  4. 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 konkuren ke URL yang sama.

Metode pengambilan aliran umum

SDK menyediakan metode untuk mengontrol siklus hidup aliran: mulai, henti, jeda, lanjutkan, mulai ulang, 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 mengambil aliran tidak berpengaruh. Setelah pratinjau dihentikan, frame pratinjau membeku pada frame terakhir. */
mAlivcLivePusher.stopPreview();
/* Panggil untuk memulai ulang 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. Memulai ulang akan menginisialisasi ulang semua sumber daya 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 sumber daya 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 pada kamera. Ini memerlukan dua parameter: 1. `point` (koordinat titik yang difokuskan) dan 2. `autoFocus` (apakah mengaktifkan autofokus untuk operasi ini). Perilaku autofokus selanjutnya 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);
Penting

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.

Konfigurasikan berbagi layar

// resultData adalah intent sistem berbagi layar.
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);

Konfigurasikan rotasi layar

Atur sudut rotasi layar untuk mendukung perekaman landscape dan portrait selama berbagi layar:

mAlivcLivePusher.setScreenOrientation(0);
Catatan

Anda perlu mendengarkan event OrientationEventListener di lapisan aplikasi dan mengatur sudut rotasi melalui API ini saat orientasi layar berubah.

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

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:

  1. Streamer memiliki pratinjau kamera.

    Baik streamer maupun pemirsa dapat melihat feed kamera.

  2. 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.
Catatan
  • Atur rasio aspek surfaceView pratinjau kamera ke 1:1 untuk menghindari penyesuaian saat rotasi layar.

  • Jika rasio aspek bukan 1:1, Anda harus menyesuaikan rasio surfaceView saat layar berotasi, lalu panggil stopCamera diikuti dengan startCamera.

  • Jika streamer tidak memerlukan pratinjau, atur surfaceview ke 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:

Pengambilan audio dan video eksternal didukung mulai SDK versi 7.8.0. Operasi intinya adalah setExternMainStream (mengaktifkan input audio dan video kustom), inputStreamAudioData (mengambil aliran audio eksternal), dan inputStreamVideoData (mengambil aliran video eksternal). SDK 7.11.0 terutama mengoptimalkan logika kedaluwarsa autentikasi klien dan menambahkan callback error pengambilan video; fitur ini tidak memperkenalkan pengambilan aliran eksternal, sehingga Anda tidak perlu melakukan peningkatan hanya untuk fitur ini.

/**
* 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 input frame audio.
*/
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 input frame video.
*/
mAlivcLivePusher.inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);

Push SDK tidak mendukung protokol RTSP. Untuk mengambil aliran RTSP dari kamera jaringan (IP camera), pertama-tama dekode aliran tersebut ke format YUV/PCM, lalu ambil menggunakan API inputStreamAudioData/inputStreamVideoData.

Alat decoding yang tersedia:

  • FFmpeg: Mendukung input RTSP dan dapat mendekode ke YUV420p dan PCM s16le. Contoh perintah: ffmpeg -rtsp_transport tcp -i rtsp://camera_ip/stream -an -c:v rawvideo -pix_fmt yuv420p output.yuv

  • GStreamer: Mendukung input RTSP dan dapat mendekode ke YUV420p dan PCM s16le.

  • MediaCodec: API framework Android (android.media.MediaCodec) yang mendukung decoding H.264 perangkat keras ke YUV mulai dari Android 4.1 (API level 16).

Format data yang didekode harus sesuai dengan konfigurasi SDK Anda: atur format video ke IMAGE_FORMAT_YUVNV12 dan format audio ke SOUND_FORMAT_S16.

Konfigurasikan watermark

Tambahkan satu atau beberapa watermark dalam format PNG:

mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3); // Tambahkan watermark.
Catatan
  • 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 mengimplementasikan watermark teks, pertama-tama ubah teks menjadi gambar, lalu gunakan API ini untuk menambahkannya sebagai watermark.

Konfigurasikan kualitas video

Tiga mode kualitas video didukung: mode Prioritas Resolusi, mode Prioritas Kelancaran, dan mode Kustom.

Penting

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 Resolution Priority

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 adalah false.
Penting
  • 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, penghilangan derau, pemantauan in-ear, dan pembisuan:

/* Mulai memutar musik latar. */
mAlivcLivePusher.startBGMAsync(mPath);
/* Hentikan pemutaran musik latar. Jika BGM sudah 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 difilter. Ini mungkin sedikit meredam suara manusia. Kami menyarankan 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, streamer tidak akan mendengarnya. Fitur 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);
Penting

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();
        }
    }
});

Jalankan di latar belakang dan kunci layar

  • Saat aplikasi Anda dipindahkan ke latar belakang atau layar dikunci, Anda dapat memanggil metode pause() atau resume() dari AlivcLivePusher untuk menjeda atau melanjutkan pengambilan aliran.

  • Untuk panggilan audio dan video non-sistem, SDK mengambil dan mengambil suara. Berdasarkan kebutuhan bisnis Anda, Anda dapat memanggil API mAlivcLivePusher.setMute(true or false) untuk menentukan apakah akan mengambil audio saat aplikasi berada di latar belakang atau layar dikunci.

Panggilan Balik

Jenis callback

Nama kelas callback

Metode pengaturan

Callback pengambilan aliran

AlivcLivePushInfoListener

mAlivcLivePusher.setLivePushInfoListener()

Callback terkait jaringan

AlivcLivePushNetworkListener

mAlivcLivePusher.setLivePushNetworkListener()

Callback kesalahan

AlivcLivePushErrorListener

mAlivcLivePusher.setLivePushErrorListener()

Callback musik latar

AlivcLivePushBGMListener

mAlivcLivePusher.setLivePushBGMListener()

Callback pengambilan aliran

Callback pengambilan aliran memberi tahu aplikasi tentang perubahan status SDK: pratinjau dimulai, frame pertama dirender, frame pertama dikirim, pengambilan aliran dimulai, dan pengambilan aliran dihentikan.

  • onPushStarted: Menunjukkan koneksi ke server berhasil.

  • onFirstFramePushed: Menunjukkan bahwa frame audio atau video pertama berhasil dikirim.

  • Callback onPushStarted dan onFirstFramePushed menunjukkan bahwa SDK telah berhasil memulai pengambilan aliran.

Callback terkait jaringan

Callback jaringan melaporkan status koneksi. SDK secara otomatis menyambung ulang saat terjadi fluktuasi jaringan singkat dalam batas waktu tunggu dan percobaan ulang yang diatur di AlivcLivePushConfig.

  • onConnectFail: Pengambilan aliran gagal. Periksa URL ingest untuk validitas, masalah autentikasi, batas aliran konkuren, atau status daftar blokir. Kode error: 0x30020901–0x30020905, 0x30010900–0x30010901.

  • onConnectionLost: Koneksi terputus. SDK secara otomatis menyambung ulang, memicu onReconnectStart. Jika percobaan ulang melebihi config.connectRetryCount, onReconnectFail dipicu.

  • onNetworkPoor: Jaringan tidak mencukupi untuk pengambilan aliran yang stabil tetapi aliran tidak terputus. Gunakan ini untuk menampilkan notifikasi UI.

  • onNetworkRecovery: Jaringan telah pulih.

  • onReconnectFail: Penyambungan ulang otomatis gagal setelah melebihi batas waktu tunggu dan percobaan ulang di AlivcLivePushConfig. Panggil mAlivcLivePusher.reconnectPushAsync untuk menyambung ulang secara manual setelah jaringan pulih.

  • onSendDataTimeout: Pengiriman data melebihi waktu tunggu. Periksa jaringan, lalu hentikan dan mulai ulang pengambilan aliran.

  • onPushURLAuthenticationOverdue: Autentikasi URL ingest kedaluwarsa. Berikan URL baru ke SDK.

Callback error

  • onSystemError: Error sistem atau perangkat. Hapus engine dan coba lagi.

  • onSDKError: Tangani berdasarkan kode error:

    • Error 805438211: Performa perangkat buruk dengan laju frame pengkodean 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 panggil startBGMAsync lagi.

  • onDownloadTimeout: Pemutaran musik melebihi waktu tunggu, biasanya saat streaming dari URL. Periksa jaringan dan panggil startBGMAsync lagi.

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 kinerja dan debugging pengambilan aliran. Untuk detail parameter kinerja, 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 pustaka retouching dan konfigurasikan callback untuk mengaktifkan retouching.

Catatan

Retouching memerlukan lisensi untuk SDK retouching. Dapatkan lisensi untuk Queen SDK.

  1. Impor pustaka retouching melalui Maven. Tambahkan berikut ke file build.gradle Anda. 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.

  2. Dapatkan pustaka plug-in retouching LiveBeauty.

    1. Gunakan perintah clone untuk mengunduh kode pustaka plugin terkait dari path LiveBeauty ke mesin lokal Anda.

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

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

      Dalam contoh kode, /*** adalah placeholder untuk path ke modul LiveBeauty.

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

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

      Dalam contoh kode, "app" adalah modul utama.

    4. Juga, dalam file build.gradle modul utama proyek, tambahkan dependensi pada modul LiveBeauty:

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

  3. Konfigurasikan modul UI plug-in retouching.

    1. Tambahkan kontrol QueenBeautyMenu ke 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" />
    2. Inisialisasi QueenBeautyMenu di 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);
  4. Atur callback pengenalan wajah dan retouching.

    Jika Anda perlu mengintegrasikan pustaka retouching pihak ketiga, atur callback setCustomDetect dan setCustomFilter.

    • Dalam customDetectProcess, parameter data adalah pointer ke data yang diambil untuk diproses pihak ketiga.

    • Dalam customFilterProcess, parameter inputTexture adalah tekstur gambar untuk diproses. Kembalikan ID tekstur yang telah diproses, atau inputTexture asli jika tidak dimodifikasi.

    Kode contoh

    /**
     * Callback pengenalan 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 aliran video yang diambil 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

Item

Deskripsi

Aturan obfuscation

Tambahkan nama paket SDK ke daftar pengecualian ProGuard Anda untuk mencegah masalah obfuscation.

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

Urutan pemanggilan API

  • Gunakan API asinkron untuk menghindari pemblokiran thread utama.

  • API SDK melempar exception saat terjadi error atau urutan pemanggilan salah. Bungkus pemanggilan dalam blok try-catch.

  • Panggil API sesuai urutan yang ditunjukkan dalam diagram berikut:

FAQ

Mengapa pengambilan aliran gagal?

Gunakan alat 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 aliran. Hasilkan URL ingest dan streaming.