All Products
Search
Document Center

ApsaraVideo Live:Gunakan Push SDK untuk Android

Last Updated:Jun 05, 2026

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

Fitur

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

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

  • Mendukung co-streaming dan battles.

  • Menggunakan H.264 untuk encoding video dan AAC untuk encoding audio.

  • Mendukung konfigurasi kustom untuk fitur seperti kontrol bitrate, resolusi, dan mode tampilan.

  • Mendukung berbagai operasi kamera.

  • Mendukung retouching real-time dan efek retouching kustom.

  • Memungkinkan penambahan dan penghapusan stiker animasi sebagai watermark.

  • Memungkinkan streaming rekaman layar.

  • Mendukung input audio dan video eksternal dalam berbagai format seperti YUV dan pulse-code modulation (PCM).

  • Mendukung pencampuran beberapa aliran.

  • Mendukung pengambilan aliran hanya audio, hanya video, serta pengambilan aliran di latar belakang.

  • Mendukung musik latar.

  • Mendukung pengambilan tangkapan video.

  • Mendukung koneksi ulang otomatis dan penanganan error.

  • Mendukung algoritma Automatic Gain Control (AGC), Automatic Noise Reduction (ANR), dan Acoustic Echo Cancellation (AEC).

  • Memungkinkan peralihan antara mode encoding perangkat lunak dan perangkat keras untuk file video guna meningkatkan stabilitas modul encoding.

Batasan

Perhatikan batasan berikut sebelum menggunakan Push SDK untuk Android:

  • Anda harus mengonfigurasi orientasi layar sebelum pengambilan aliran. Rotasi layar tidak diperbolehkan selama live streaming.

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

  • Dalam mode encoding perangkat keras, nilai resolusi output harus merupakan kelipatan 16 agar kompatibel dengan encoder. Misalnya, jika Anda mengatur resolusi ke 540p, resolusi output menjadi 544 × 960. Anda harus menyesuaikan ukuran layar pemutar berdasarkan resolusi output untuk mencegah munculnya bilah hitam.

Referensi API

Referensi API (Edisi Dasar)

Prosedur

  1. Daftarkan SDK

  2. Konfigurasi 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 lebih awal dalam siklus hidup aplikasi Anda, sebelum menggunakan Push SDK untuk Android.

AlivcLiveBase.setListener(new AlivcLiveBaseListener() {
  @Override
  public void onLicenceCheck(AlivcLivePushConstants.AlivcLiveLicenseCheckResultCode result, String reason) {
    Log.e(TAG, "onLicenceCheck: " + result + ", " + reason);
  }
});
AlivcLiveBase.registerSDK();
  • Gunakan kelas 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.

Konfigurasi parameter pengambilan aliran

Parameter pengambilan aliran memiliki nilai default yang tidak memerlukan konfigurasi tambahan.

// Inisialisasi kelas konfigurasi pengambilan aliran.
AlivcLivePushConfig mAlivcLivePushConfig = new AlivcLivePushConfig();
// Atur mode pengambilan aliran. Default-nya adalah mode dasar.
mAlivcLivePushConfig.setLivePushMode(AlivcLiveMode.AlivcLiveBasicMode);
// Atur resolusi. Default-nya adalah 540p.
mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
// Atur laju frame. Default-nya adalah 25 fps.
mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_25);
// Atur ukuran GOP video encoding dalam detik. Default-nya adalah 2 detik.
mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_TWO);
// Aktifkan kontrol bitrate. Ini diaktifkan secara default.
mAlivcLivePushConfig.setEnableBitrateControl(true);
// Atur orientasi layar. Default-nya adalah portrait. Anda juga dapat mengaturnya ke landscape dengan tombol home di kiri atau kanan.
mAlivcLivePushConfig.setPreviewOrientation(AlivcPreviewOrientationEnum.ORIENTATION_PORTRAIT);
// Atur profil audio encoding. Default-nya adalah AAC-LC.
mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AAC_LC);
// Atur mode video encoding. Default-nya adalah encoding perangkat keras.
mAlivcLivePushConfig.setVideoEncodeMode(AlivcEncodeModeEnum.Encode_MODE_HARD);
// Atur mode audio encoding. Default-nya adalah encoding perangkat lunak.
mAlivcLivePushConfig.setAudioEncodeMode(AlivcEncodeModeEnum.Encode_MODE_SOFT);
// Atur jenis kamera. Default-nya adalah kamera depan.
mAlivcLivePushConfig.setCameraType(AlivcLivePushCameraTypeEnum.CAMERA_TYPE_FRONT);
// Atur gambar yang ditampilkan saat aplikasi berada di latar belakang atau pengambilan aliran dijeda.
mAlivcLivePushConfig.setPausePushImage("TODO: Image Path");
// Atur gambar yang ditampilkan dalam kondisi jaringan buruk.
mAlivcLivePushConfig.setNetworkPoorPushImage("TODO: Image Path");
Penting
  • Atur resolusi ke 540p untuk mencapai keseimbangan optimal antara performa perangkat dan bandwidth.

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

Ambil aliran kamera

  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 diikuti oleh 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 bersamaan ke URL yang sama.

Metode pengambilan aliran umum

SDK menyediakan metode untuk mengontrol siklus hidup aliran: mulai, henti, jeda, lanjutkan, restart, sambung ulang, dan hapus.

/* Panggil untuk menjeda aliran yang sedang diambil. Setelah dijeda, pratinjau video dan pengambilan aliran video ditahan pada frame terakhir, sedangkan pengambilan aliran audio tetap berlanjut. */
mAlivcLivePusher.pause();
/* Panggil untuk melanjutkan aliran yang dijeda. Setelah dilanjutkan, pratinjau audio dan video serta pengambilan aliran kembali normal. */
mAlivcLivePusher.resume();
/* Panggil untuk menghentikan aliran yang sedang diambil. Setelah selesai, pengambilan aliran berhenti. */
mAlivcLivePusher.stopPush();
/* Panggil untuk menghentikan pratinjau saja saat berada dalam status pratinjau. Memanggil ini saat sedang mengambil aliran tidak berpengaruh. Setelah pratinjau berhenti, frame pratinjau membeku pada frame terakhir. */
mAlivcLivePusher.stopPreview();
/* Panggil untuk merestart pengambilan aliran saat aliran sedang diambil atau setelah menerima callback terkait error apa pun. Dalam status error, Anda hanya dapat memanggil API ini, reconnectPushAsync, atau destroy. Merestart akan menginisialisasi ulang semua resource internal AlivcLivePusher, termasuk pratinjau dan pengambilan aliran. */
mAlivcLivePusher.restartPush();
/* Panggil untuk menyambung ulang aliran saat sedang diambil atau setelah menerima callback error terkait AlivcLivePusherNetworkDelegate. Dalam status error, Anda hanya dapat memanggil API ini, restartPush, atau destroy. Menyambung ulang akan membangun kembali koneksi RTMP untuk pengambilan aliran. */
mAlivcLivePusher.reconnectPushAsync();
/* Panggil untuk menghapus instans pengambilan aliran. Setelah dihapus, pengambilan aliran dan pratinjau berhenti, serta surface pratinjau dihapus. Semua resource terkait AlivcLivePusher dilepaskan. */
mAlivcLivePusher.destroy();

Operasi kamera

Beralih kamera, mengaktifkan/menonaktifkan flash, serta menyesuaikan fokus, zoom, dan pencerminan selama pengambilan aliran, jeda, atau penyambungan ulang:

/* Beralih antara kamera depan dan belakang. */
mAlivcLivePusher.switchCamera();
/* Mengaktifkan atau menonaktifkan flash. Mengaktifkan flash tidak berpengaruh saat kamera depan aktif. */
mAlivcLivePusher.setFlash(true); 
/* Menyesuaikan panjang fokus untuk memperbesar gambar yang diambil. Rentang zoom adalah [0, getMaxZoom()]. */
mAlivcLivePusher.setZoom(5);
/* Fokus manual kamera. Ini memerlukan dua parameter: 1. `point` (koordinat titik yang difokuskan) dan 2. `autoFocus` (apakah mengaktifkan autofokus untuk operasi ini). Perilaku autofokus berikutnya mengikuti nilai yang diatur oleh API setAutoFocus. */
mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true);
/* Atur apakah akan mengaktifkan autofokus. */
mAlivcLivePusher.setAutoFocus(true);
/* Konfigurasi pencerminan. Terdapat dua API pencerminan: PushMirror untuk aliran yang diambil dan PreviewMirror untuk pratinjau lokal. PushMirror hanya memengaruhi tampilan pemutaran, sedangkan PreviewMirror hanya memengaruhi tampilan pratinjau. Keduanya tidak saling memengaruhi. */
mAlivcLivePusher.setPreviewMirror(false);
mAlivcLivePusher.setPushMirror(false);
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.

Konfigurasi berbagi layar

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

Konfigurasi rotasi layar

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

mAlivcLivePusher.setScreenOrientation(0);
Catatan

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

Konfigurasi perlindungan privasi

Aktifkan perlindungan privasi selama berbagi layar untuk menyembunyikan input sensitif seperti kata sandi:

mAlivcLivePusher.pauseScreenCapture(); // Aktifkan perlindungan privasi.
mAlivcLivePusher.resumeScreenCapture(); // Nonaktifkan perlindungan privasi.
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 memanggil 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:

/**
* Parameter lain seperti resolusi output, laju sampel audio, dan jumlah channel diatur dalam objek konfigurasi
* menggunakan setResolution, setAudioSampleRate, dan setAudioChannels.
*/
mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12,AlivcSoundFormat.SOUND_FORMAT_S16);

Setelah mengaktifkan input audio dan video kustom, Anda dapat mengambil aliran eksternal.

Ambil aliran audio eksternal

/**
* API ini tidak mengontrol waktu. Pemanggil harus mengontrol waktu frame audio input.
*/
mAlivcLivePusher.inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts);

Ambil aliran video eksternal

/**
* API ini tidak mengontrol waktu. Pemanggil harus mengontrol waktu frame video input.
*/
mAlivcLivePusher.inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);

Konfigurasi watermark

Tambahkan satu atau beberapa watermark dalam format PNG:

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

Konfigurasi kualitas video

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

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

Resolusi

initialVideoBitrate

minVideoBitrate

targetVideoBitrate

360p

400

200

600

480p

600

300

800

540p

800

300

1000

720p

1000

300

1200

1080p

1500

1200

2200

Resolusi adaptif

Resolusi adaptif secara otomatis menurunkan resolusi dalam kondisi jaringan buruk untuk meningkatkan kelancaran:

mAlivcLivePushConfig.setEnableAutoResolution(true); // Aktifkan resolusi adaptif. Default-nya false.
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, denoising, pemantauan in-ear, dan pembisuan:

/* Mulai memutar musik latar. */
mAlivcLivePusher.startBGMAsync(mPath);
/* Hentikan pemutaran musik latar. Jika BGM sedang diputar dan Anda perlu mengganti lagu, cukup panggil API mulai musik latar lagi. Anda tidak perlu menghentikan BGM saat ini. */
mAlivcLivePusher.stopBGMAsync();
/* Jeda musik latar. Ini hanya dapat dipanggil setelah BGM mulai diputar. */
mAlivcLivePusher.pauseBGM();
/* Lanjutkan musik latar. Ini hanya dapat dipanggil saat BGM dijeda. */
mAlivcLivePusher.resumeBGM();
/* Aktifkan pengulangan untuk musik latar. */
mAlivcLivePusher.setBGMLoop(true);
/* Atur sakelar denoise. Saat diaktifkan, suara non-manusia dalam audio yang diambil akan disaring. Ini mungkin sedikit meredam suara manusia. Kami merekomendasikan agar pengguna memilih apakah akan mengaktifkan fitur ini. Fitur ini dinonaktifkan secara default. */
mAlivcLivePusher.setAudioDenoise(true);
/* Atur sakelar pemantauan in-ear. Fitur ini terutama digunakan dalam skenario karaoke. Saat diaktifkan dengan headphone terpasang, streamer akan mendengar suaranya sendiri. Saat dinonaktifkan, mereka tidak akan mendengarnya. Ini tidak berpengaruh jika headphone tidak terpasang. */
mAlivcLivePusher.setBGMEarsBack(true);
/* Konfigurasi pencampuran untuk menyesuaikan volume musik latar dan suara yang diambil. */
mAlivcLivePusher.setBGMVolume(50); // Atur volume musik latar.
mAlivcLivePusher.setCaptureVolume(50); // Atur volume suara yang diambil.
/* Bisukan audio. Ini membisukan musik dan input suara. Untuk membisukan hanya musik atau suara, gunakan API penyesuaian volume pencampuran. */
mAlivcLivePusher.setMute(true);
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();
        }
    }
});

Berjalan 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 menangkap dan mengambil suara. Berdasarkan kebutuhan bisnis Anda, Anda dapat memanggil API mAlivcLivePusher.setMute(true or false) untuk menentukan apakah akan menangkap audio saat aplikasi berada di latar belakang atau layar dikunci.

Panggilan Balik

Jenis callback

Nama kelas callback

Metode pengaturan

Callback pengambilan aliran

AlivcLivePushInfoListener

mAlivcLivePusher.setLivePushInfoListener()

Callback terkait jaringan

AlivcLivePushNetworkListener

mAlivcLivePusher.setLivePushNetworkListener()

Callback error

AlivcLivePushErrorListener

mAlivcLivePusher.setLivePushErrorListener()

Callback musik latar

AlivcLivePushBGMListener

mAlivcLivePusher.setLivePushBGMListener()

Callback pengambilan aliran

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

  • onPushStarted: Menunjukkan koneksi berhasil ke server.

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

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

Callback terkait jaringan

Callback jaringan melaporkan status koneksi. SDK melakukan koneksi ulang otomatis pada fluktuasi jaringan singkat dalam batas timeout dan percobaan ulang yang diatur di AlivcLivePushConfig.

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

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

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

  • onNetworkRecovery: Jaringan telah pulih.

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

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

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

Callback kesalahan

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

  • onSDKError: Tangani berdasarkan kode error:

    • Error 805438211: Performa perangkat buruk dengan laju frame encoding rendah. Beri tahu streamer dan hentikan operasi intensif sumber daya seperti retouching lanjutan.

    • Tangani error izin yang hilang: 268455940 (mikrofon) dan 268455939 (kamera).

    • Catat semua error lainnya.

Callback musik latar

  • onOpenFailed: Musik latar gagal dimulai. Verifikasi path dan format file, lalu panggil startBGMAsync lagi.

  • onDownloadTimeout: Pemutaran musik timeout, 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 performa dan debugging pengambilan aliran. Untuk detail parameter performa, lihat referensi API atau komentar antarmuka. */
mAlivcLivePusher.getLivePushStatsInfo();
/* Dapatkan nomor versi SDK. */
mAlivcLivePusher.getSDKVersion();
/* Atur tingkat log untuk memfilter informasi debugging sesuai kebutuhan. */
mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll);
/* Dapatkan status SDK saat ini. */
mAlivcLivePusher.getCurrentStatus();
/* Dapatkan kode error terakhir. Mengembalikan ALIVC_COMMON_RETURN_SUCCESS jika tidak ada error. */
mAlivcLivePusher.getLastError();

API umum

Kelas

Deskripsi

AlivcLivePushConfig

Konfigurasi awal untuk pengambilan aliran.

AlivcLivePusher

Kelas untuk fitur pengambilan aliran.

AlivcLivePusherErrorListener

Callback untuk error.

AlivcLivePusherNetworkListener

Callback untuk notifikasi terkait jaringan.

AlivcLivePusherInfoListener

Callback untuk informasi pengambilan aliran.

AlivcLivePusherBGMListener

Callback untuk musik latar.

AlivcLivePushCustomFilter

Callback untuk filter kustom.

AlivcLivePushCustomDetect

Callback untuk pengenalan wajah kustom.

AlivcSnapshotListener

Callback untuk tangkapan.

Integrasikan retouching

Impor library retouching dan konfigurasi callback untuk mengaktifkan retouching.

Catatan

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

  1. Impor library 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 library plug-in retouching LiveBeauty.

    1. Gunakan perintah clone untuk mengunduh kode library 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 kode contoh, /*** adalah placeholder untuk path ke modul LiveBeauty.

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

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

      Dalam kode contoh, "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. Konfigurasi 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 library retouching pihak ketiga, atur callback setCustomDetect dan setCustomFilter.

    • Dalam customDetectProcess, parameter data adalah pointer ke data yang diambil untuk pemrosesan 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 tool troubleshooting untuk memvalidasi URL ingest Anda.

Bagaimana cara mendapatkan informasi tentang aliran aktif?

Lihat dan kelola aliran aktif di halaman manajemen aliran.

Bagaimana cara menguji pemutaran aliran?

Uji pemutaran dengan pemutar Alibaba Cloud, FFplay, atau VLC setelah memulai pengambilan. Hasilkan URL ingest dan streaming.