全部产品
Search
文档中心

ApsaraVideo Live:Penggunaan fitur

更新时间:Jan 25, 2026

Topik ini menjelaskan API Push SDK untuk iOS, alur kerja dasar SDK, serta menyediakan contoh penggunaan fitur-fiturnya.

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.

  • Mengadopsi 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 penyandian perangkat lunak dan perangkat keras untuk file video, sehingga meningkatkan stabilitas modul penyandian.

Batasan

Perhatikan batasan berikut sebelum menggunakan Push SDK untuk iOS:

  • 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 penyandian perangkat keras, nilai resolusi output harus 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 bar hitam.

Referensi API

Referensi API untuk Edisi Dasar

Prosedur

Prosedur dasarnya adalah sebagai berikut:

  1. Daftarkan SDK

  2. Konfigurasikan parameter pengambilan aliran

  3. Ambil aliran

Penggunaan fitur

Daftarkan SDK

Untuk meminta dan mengonfigurasi lisensi, lihat Panduan Integrasi Lisensi.

Catatan

Daftarkan SDK sebelum menggunakan fitur pengambilan aliran. Jika tidak, Anda tidak dapat menggunakan Push SDK.

Panggil metode pendaftaran lisensi pada tahap early, sebelum menggunakan Push SDK.

[AlivcLiveBase registerSDK];
  • Kelas AlivcLiveBase memungkinkan Anda mengatur tingkat log, menetapkan path log lokal, dan mendapatkan versi SDK.

  • Dalam metode onLicenceCheck dari antarmuka AlivcLiveBase#setObserver, periksa secara asinkron apakah lisensi telah dikonfigurasi.

Konfigurasikan parameter pengambilan aliran

Di ViewController tempat Anda memerlukan pusher, impor file header #import <AlivcLivePusher/AlivcLivePusher.h>.

Parameter pengambilan aliran dasar memiliki nilai default. Kami menyarankan Anda menggunakan nilai default tersebut. Anda dapat melakukan inisialisasi sederhana tanpa konfigurasi tambahan.

AlivcLivePushConfig *config = [[AlivcLivePushConfig alloc] init];// Inisialisasi kelas konfigurasi pengambilan aliran. Anda juga dapat menggunakan initWithResolution untuk inisialisasi.
config.resolution = AlivcLivePushResolution540P;// Resolusi default adalah 540P. Resolusi maksimum adalah 720P.
config.fps = AlivcLivePushFPS20; // Kami menyarankan Anda menggunakan 20 fps.
config.enableAutoBitrate = true; // Aktifkan kontrol bitrate. Nilai default adalah true.
config.videoEncodeGop = AlivcLivePushVideoEncodeGOP_2;// Nilai default adalah 2. Ukuran GOP yang lebih besar menghasilkan latensi lebih tinggi. Kami menyarankan Anda mengatur parameter ini ke 1 atau 2.
config.connectRetryInterval = 2000; // Satuan: milidetik. Durasi koneksi ulang adalah 2 detik. Interval koneksi ulang minimal 1 detik. Kami menyarankan Anda menggunakan nilai default.
config.previewMirror = false; // Nilai default adalah false. Dalam kondisi normal, pilih false.
config.orientation = AlivcLivePushOrientationPortrait; // Orientasi default adalah portrait. Anda dapat mengatur perangkat ke mode landscape dengan tombol home di kiri atau kanan.
Penting
  • Mempertimbangkan performa perangkat seluler dan persyaratan lebar pita jaringan, kami menyarankan Anda mengatur resolusi ke 540P. Sebagian besar aplikasi live streaming utama menggunakan 540P.

  • Jika Anda menonaktifkan kontrol bitrate, bitrate akan tetap pada bitrate awal dan tidak menyesuaikan secara otomatis antara bitrate target dan minimum. Jika jaringan tidak stabil, hal ini dapat menyebabkan tersendat saat pemutaran. Gunakan opsi ini dengan hati-hati.

Ambil aliran kamera

  1. Inisialisasi.

    Setelah mengonfigurasi parameter pengambilan aliran, gunakan metode initWithConfig dari Push SDK untuk melakukan inisialisasi. Contoh kode:

    self.livePusher = [[AlivcLivePusher alloc] initWithConfig:config];
    Catatan

    AlivcLivePusher tidak mendukung beberapa instans. Oleh karena itu, setiap panggilan init harus diikuti oleh panggilan destroy yang sesuai.

  2. Daftarkan callback pengambilan aliran.

    Callback pengambilan aliran berikut didukung:

    • Info: callback yang digunakan untuk notifikasi dan deteksi status.

    • Error: callback yang dikembalikan saat terjadi error.

    • Network: callback yang terkait dengan jaringan.

    Daftarkan delegate untuk menerima callback yang sesuai. Contoh kode:

    [self.livePusher setInfoDelegate:self];
    [self.livePusher setErrorDelegate:self];
    [self.livePusher setNetworkDelegate:self];
  3. Mulai pratinjau.

    Setelah objek livePusher diinisialisasi, Anda dapat memulai pratinjau. Saat melakukan pratinjau, Anda harus memberikan tampilan untuk pratinjau kamera. Tampilan tersebut mewarisi dari UIView. Contoh kode:

    [self.livePusher startPreview:self.view];
  4. Mulai pengambilan aliran.

    Anda hanya dapat memulai pengambilan aliran setelah pratinjau berhasil. Oleh karena itu, dengarkan callback onPreviewStarted dari AlivcLivePusherInfoDelegate dan tambahkan kode berikut di dalam callback tersebut.

    [self.livePusher startPushWithURL:@"URL pengambilan uji coba (rtmp://......)"];
    Catatan
    • URL pengambilan RTMP dan RTS (artc://) didukung. Untuk menghasilkan URL pengambilan, lihat Hasilkan URL streaming.

    • ApsaraVideo Live tidak mendukung pengambilan beberapa aliran ke URL pengambilan yang sama secara bersamaan. Permintaan pengambilan aliran kedua akan ditolak.

Operasi terkait kamera

Anda hanya dapat memanggil operasi terkait kamera setelah pratinjau dimulai. Operasi ini tersedia dalam status streaming, dijeda, atau sedang menghubungkan ulang. Anda dapat beralih antara kamera depan dan belakang serta mengonfigurasi flash, panjang fokus, zoom, dan pengaturan pencerminan. Jika Anda memanggil metode berikut sebelum pratinjau dimulai, panggilan tersebut tidak valid. Contoh kode:

/* Beralih antara kamera depan dan belakang. */
[self.livePusher switchCamera];
/* Aktifkan atau nonaktifkan flash. Anda tidak dapat mengaktifkan flash untuk kamera depan. */
[self.livePusher setFlash:false]; 
/* Sesuaikan panjang fokus untuk memperbesar atau memperkecil frame yang ditangkap. Berikan angka positif untuk meningkatkan panjang fokus. Berikan angka negatif untuk mengurangi panjang fokus. */
CGFloat max = [_livePusher getMaxZoom];
[self.livePusher setZoom:MIN(1.0, max)]; 
/* Fokus manual. Untuk fokus manual, Anda harus memberikan dua parameter: 1. point: titik yang akan difokuskan (koordinat titik yang akan difokuskan). 2. autoFocus: menentukan apakah autofocus diaktifkan. Parameter ini hanya berlaku untuk operasi fokus panggilan API ini. Operasi autofocus berikutnya menggunakan nilai yang diatur oleh API autofocus. */
[self.livePusher focusCameraAtAdjustedPoint:CGPointMake(50, 50) autoFocus:true];
/* Atur apakah autofocus diaktifkan. */
[self.livePusher setAutoFocus:false];
/* Konfigurasikan pencerminan. Terdapat dua antarmuka pencerminan: PushMirror untuk pencerminan aliran pengambilan dan PreviewMirror untuk pencerminan pratinjau. Pengaturan PushMirror hanya berlaku pada layar pemutaran. Pengaturan PreviewMirror hanya berlaku pada layar pratinjau. Kedua pengaturan ini tidak saling memengaruhi. */
[self.livePusher setPushMirror:false];
[self.livePusher setPreviewMirror:false];

Kontrol pengambilan aliran

Kontrol pengambilan aliran mencakup operasi seperti memulai, menghentikan, menjeda, dan melanjutkan pengambilan aliran, menghentikan pratinjau, memulai ulang pengambilan aliran, dan menghapus instans pengambilan aliran. Anda dapat menambahkan tombol untuk melakukan operasi ini sesuai kebutuhan bisnis Anda. Contoh kode:

/* Anda dapat mengatur pauseImage lalu memanggil metode pause untuk beralih dari pengambilan aliran kamera ke pengambilan aliran gambar statis. Pengambilan aliran audio tetap berlanjut. */
[self.livePusher pause];
/* Beralih dari pengambilan aliran gambar statis ke pengambilan aliran kamera. Pengambilan aliran audio tetap berlanjut. */
[self.livePusher resume];
/* Dalam status streaming, Anda dapat memanggil metode ini untuk menghentikan pengambilan aliran. Setelah operasi selesai, pengambilan aliran berhenti. */
[self.livePusher stopPush];
/* Anda hanya dapat menghentikan pratinjau dalam status pratinjau. Jika Anda sedang mengambil aliran, menghentikan pratinjau tidak valid. Setelah pratinjau dihentikan, layar pratinjau membeku pada frame terakhir. */
[self.livePusher stopPreview];
/* Dalam status streaming atau saat menerima callback terkait Error apa pun, Anda dapat memanggil metode ini untuk memulai ulang pengambilan aliran. Dalam status error, Anda hanya dapat memanggil metode ini (atau reconnectPushAsync untuk koneksi ulang) atau memanggil destroy untuk menghapus instans pengambilan aliran. Setelah operasi selesai, pengambilan aliran dimulai ulang. Semua sumber daya internal ALivcLivePusher, termasuk pratinjau dan pengambilan aliran, dimulai ulang. */
[self.livePusher restartPush];
/* Dalam status streaming atau saat menerima callback Error terkait AlivcLivePusherNetworkDelegate, Anda dapat memanggil antarmuka ini. Dalam status error, Anda hanya dapat memanggil antarmuka ini (atau restartPush untuk memulai ulang pengambilan aliran) atau memanggil destroy untuk menghapus instans pengambilan aliran. Setelah operasi selesai, pengambilan aliran terhubung ulang. Koneksi RTMP untuk pengambilan aliran dibuat ulang. */
[self.livePusher reconnectPushAsync];
/* Setelah instans pengambilan aliran dihapus, pengambilan aliran dan pratinjau berhenti, serta layar pratinjau dihapus. Semua sumber daya terkait AlivcLivePusher dihapus. */
[self.livePusher destory];
self.livePusher = nil;
/* Dapatkan status pengambilan aliran. */
AlivcLivePushStatus status = [self.livePusher getLiveStatus];

Pengambilan aliran rekaman layar (berbagi layar)

ReplayKit adalah fitur yang diperkenalkan di iOS 9 yang mendukung perekaman layar. Di iOS 10, ReplayKit diperluas untuk memungkinkan pemanggilan ekstensi aplikasi pihak ketiga guna melakukan live streaming konten layar. Pada iOS 10 dan versi selanjutnya, Anda dapat menggunakan Push SDK bersama proses perekaman layar Ekstensi untuk mengimplementasikan berbagi layar dalam live streaming.

Untuk memastikan kelancaran operasi sistem, iOS mengalokasikan sumber daya yang relatif terbatas ke proses perekaman layar Ekstensi. Jika proses tersebut menggunakan terlalu banyak memori, sistem akan memaksa menghentikannya. Untuk mengatasi batasan memori pada proses perekaman layar Ekstensi, Push SDK membagi pengambilan aliran berbagi layar menjadi dua bagian: proses perekaman layar Ekstensi (Aplikasi Ekstensi) dan proses aplikasi utama (Aplikasi Host). Aplikasi Ekstensi bertanggung jawab untuk menangkap konten layar dan mengirimkannya ke Aplikasi Host melalui komunikasi antar-proses. Aplikasi Host membuat mesin pengambilan aliran AlivcLivePusher dan mendorong data layar ke server remote. Karena seluruh proses pengambilan aliran diselesaikan di Aplikasi Host, pengambilan dan pengiriman audio mikrofon juga ditangani oleh Aplikasi Host, sedangkan Aplikasi Ekstensi hanya bertanggung jawab untuk menangkap konten layar.

Penting

Demo Push SDK menggunakan App Group untuk mengimplementasikan komunikasi antar-proses antara proses perekaman layar Ekstensi dan proses aplikasi utama. Logika ini dikapsulkan dalam AlivcLibReplayKitExt.framework.

Untuk mengimplementasikan pengambilan aliran berbagi layar di iOS, proses perekaman layar Ekstensi dibuat oleh sistem saat perekaman layar diperlukan. Proses ini bertanggung jawab untuk menerima gambar layar yang ditangkap oleh sistem. Lakukan langkah-langkah berikut:

  1. Buat App Group.

    Masuk ke Apple Developer dan lakukan operasi berikut:

    1. Di halaman Certificates, IDs & Profiles, daftarkan App Group. Untuk informasi selengkapnya, lihat Daftarkan App Group.

    2. Kembali ke halaman Identifier, pilih App IDs, lalu klik App ID Anda untuk mengaktifkan fitur App Group. App ID untuk proses aplikasi utama dan proses perekaman layar Ekstensi harus dikonfigurasi dengan cara yang sama. Untuk informasi selengkapnya, lihat Aktifkan App Group.

    3. Setelah operasi selesai, unduh kembali Provisioning Profile yang sesuai dan konfigurasikan di Xcode.

    Setelah Anda melakukan operasi dengan benar, proses perekaman layar Ekstensi dapat berkomunikasi dengan proses aplikasi utama.

    Catatan

    Setelah membuat App Group, simpan nilai App Group Identifier. Nilai ini diperlukan untuk langkah-langkah selanjutnya.

  2. Buat proses perekaman layar Ekstensi.

    Demo iOS Push SDK menyediakan ekstensi aplikasi AlivcLiveBroadcast dan AlivcLiveBroadcastSetupUI yang mendukung berbagi layar untuk live streaming. Untuk membuat proses perekaman layar Ekstensi di aplikasi, lakukan langkah-langkah berikut:

    1. Di proyek yang sudah ada, pilih New > Target… dan pilih Broadcast Upload Extension, seperti yang ditunjukkan pada gambar berikut:录屏2

    2. Ubah Product Name, pilih Include UI Extension, lalu klik Finish untuk membuat ekstensi live streaming dan UI, seperti yang ditunjukkan pada gambar berikut:录屏步骤1

    3. Konfigurasikan file Info.plist untuk ekstensi live streaming. Di target yang baru dibuat, Xcode secara default membuat file header dan file sumber bernama SampleHandler, seperti yang ditunjukkan pada gambar berikut:录屏3

      Seret AlivcLibReplayKitExt.framework ke proyek agar Target Ekstensi bergantung padanya.1Ganti kode di SampleHandler.m dengan kode berikut. Ganti KAPP Group dalam kode dengan App Group Identifier yang Anda buat pada langkah pertama. Contoh kode:

      
      #import "SampleHandler.h"
      #import <AlivcLibReplayKitExt/AlivcLibReplayKitExt.h>
      
      @implementation SampleHandler
      
      - (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *>
      *)setupInfo {
      
       //User has requested to start the broadcast. Setup info from the UI extension can
      be supplied but optional.
       [[AlivcReplayKitExt sharedInstance] setAppGroup:kAPPGROUP];
      }
      
      - (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
       if (sampleBufferType != RPSampleBufferTypeAudioMic) {
       // Audio is captured and sent by the main app process.
       [[AlivcReplayKitExt sharedInstance] sendSampleBuffer:sampleBuffer withType:sampleBufferType];
       }
      }
      
      - (void)broadcastFinished {
      
       [[AlivcReplayKitExt sharedInstance] finishBroadcast];
      }
      @end
      
                                          

    Di proyek Anda, buat target Broadcast Upload Extension. Di Target Ekstensi ini, integrasikan AlivcLibReplayKitExt.framework yang disesuaikan untuk modul ekstensi perekaman layar.

  3. Integrasikan Live SDK ke proses aplikasi utama untuk pengambilan aliran berbagi layar.

    Di proses aplikasi utama untuk pengambilan aliran berbagi layar, buat objek AlivcLivePushConfig dan AlivcLivePusher. Atur ExternMainStream ke True dan AudioFromExternal ke False. Konfigurasi ini menunjukkan bahwa audio masih ditangkap oleh SDK. Panggil StartScreenCapture untuk mulai menerima data layar dari Aplikasi Ekstensi. Kemudian, mulai dan hentikan pengambilan aliran. Untuk informasi selengkapnya, lihat langkah-langkah berikut:

    1. Di proses aplikasi utama untuk pengambilan aliran berbagi layar, tambahkan dependensi pada AlivcLivePusher.framework, AlivcLibRtmp.framework, RtsSDK.framework, dan AlivcLibReplayKitExt.framework.3

    2. Inisialisasi Push SDK dan konfigurasikan untuk menggunakan sumber video eksternal.

      Atur ExternMainStream ke True dan ExternVideoFormat ke AlivcLivePushVideoFormatYUV420P. Untuk menggunakan SDK internal untuk pengambilan audio, atur AudioFromExternal ke False. Konfigurasikan parameter pengambilan aliran lainnya. Untuk informasi selengkapnya, lihat contoh kode berikut:

       self.pushConfig.externMainStream = true;
       self.pushConfig.externVideoFormat = AlivcLivePushVideoFormatYUV420P;
       self.pushConfig.audioSampleRate = 44100;
       self.pushConfig.audioChannel = 2;
       self.pushConfig.audioFromExternal = false;
       self.pushConfig.videoEncoderMode = AlivcLivePushVideoEncoderModeSoft;
       self.pushConfig.qualityMode = AlivcLivePushQualityModeCustom;
       self.pushConfig.targetVideoBitrate = 2500;
       self.pushConfig.minVideoBitrate = 2000;
       self.pushConfig.initialVideoBitrate = 2000;
       self.livePusher = [[AlivcLivePusher alloc] initWithConfig:self.pushConfig];
      
                                      
    3. Gunakan AlivcLivePusher untuk melakukan fungsi terkait live streaming. Panggil fungsi-fungsi berikut:

      • Mulai menerima data layar.

        Ganti kAPPGroup dalam kode dengan App Group Identifier yang Anda buat. Contoh kode:

        [self.livePusher startScreenCapture:kAPPGROUP];
      • Mulai pengambilan aliran.

        Contoh kode:

        [self.livePusher startPushWithURL:self.pushUrl]
      • Hentikan pengambilan aliran.

        Contoh kode:

        [self.livePusher stopPush];
        [self.livePusher destory];
        self.livePusher = nil;

Mode tampilan pratinjau

Push SDK mendukung tiga mode pratinjau. Mode tampilan pratinjau tidak memengaruhi pengambilan aliran.

  • ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL: Pratinjau mengisi jendela. Jika rasio aspek video berbeda dari rasio aspek jendela, pratinjau akan terdistorsi.

  • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT: Rasio aspek video dipertahankan selama pratinjau. Jika rasio aspek video berbeda dari rasio aspek jendela, bar hitam akan muncul di pratinjau. Ini adalah mode default.

  • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: Video dipotong agar sesuai dengan rasio aspek jendela selama pratinjau. Jika rasio aspek video berbeda dari rasio aspek jendela, pratinjau akan dipotong.

Contoh kode:

mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);
Catatan
  • Anda dapat mengatur salah satu dari tiga mode di AlivcLivePushConfig. Anda juga dapat mengatur mode secara dinamis selama pratinjau dan pengambilan aliran menggunakan API setpreviewDisplayMode.

  • Pengaturan ini hanya berlaku untuk tampilan pratinjau. Resolusi aliran video yang sebenarnya diambil sama dengan resolusi yang telah ditetapkan di AlivcLivePushConfig dan tidak berubah saat Anda mengubah mode tampilan pratinjau. Mode tampilan pratinjau dirancang untuk beradaptasi dengan ponsel berbagai ukuran. Anda dapat memilih efek pratinjau yang Anda sukai.

Pengambilan aliran gambar

Untuk pengalaman pengguna yang lebih baik, SDK menyediakan pengaturan untuk pengambilan aliran gambar latar belakang dan pengambilan aliran gambar saat bitrate terlalu rendah. Saat SDK dipindahkan ke latar belakang, pengambilan aliran video dijeda secara default, dan hanya audio yang diambil. Pada saat ini, Anda dapat mengatur gambar untuk pengambilan aliran gambar. Misalnya, Anda dapat menampilkan gambar untuk mengingatkan pengguna bahwa streamer sedang pergi sebentar dan akan segera kembali. Contoh kode:

config.pauseImg = [UIImage imageNamed:@"image.png"];// Atur gambar untuk pengambilan aliran latar belakang.

Selain itu, saat jaringan buruk, Anda dapat mengatur gambar statis untuk diambil sesuai kebutuhan. Setelah Anda mengatur gambar tersebut, SDK akan mendeteksi saat bitrate saat ini rendah dan mengambil gambar ini untuk menghindari tersendatnya aliran video. Contoh kode:

config.networkPoorImg = [UIImage imageNamed:@"image.png"];// Atur gambar yang akan diambil saat jaringan buruk.

Dorong aliran audio dan video eksternal

Push SDK mendukung pengambilan sumber audio dan video eksternal, seperti file audio atau video.

  1. Konfigurasikan input audio dan video eksternal dalam konfigurasi pengambilan aliran.

  2. Contoh kode:

    config.externMainStream = true;// Aktifkan input aliran eksternal.
    config.externVideoFormat = AlivcLivePushVideoFormatYUVNV21;// Atur format warna data video. Dalam contoh ini, format diatur ke YUVNV21. Anda dapat mengatur format ke nilai lain sesuai kebutuhan.
    config.externAudioFormat = AlivcLivePushAudioFormatS16;// Atur format kedalaman bit data audio. Dalam contoh ini, format diatur ke S16. Anda dapat mengatur format ke nilai lain sesuai kebutuhan.
  3. Masukkan data video eksternal.

  4. Contoh kode:

    /* Hanya data buffer kontinu dalam format YUV dan RGB video eksternal yang dapat dikirim menggunakan antarmuka sendVideoData. Anda dapat mengirim buffer data video, panjang, lebar, tinggi, timestamp, dan sudut rotasi. */
    [self.livePusher sendVideoData:yuvData width:720 height:1280 size:dataSize pts:nowTime rotation:0];
    /* Jika data video eksternal dalam format CMSampleBufferRef, Anda dapat menggunakan antarmuka sendVideoSampleBuffer. */
    [self.livePusher sendVideoSampleBuffer:sampleBuffer]
    /* Anda juga dapat mengonversi format CMSampleBufferRef ke buffer kontinu lalu meneruskannya ke antarmuka sendVideoData. Berikut adalah kode referensi untuk konversi tersebut. */
    // Dapatkan panjang buffer sampel.
    - (int) getVideoSampleBufferSize:(CMSampleBufferRef)sampleBuffer {
    if(!sampleBuffer) {
     return 0;
    }
    int size = 0;
    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    CVPixelBufferLockBaseAddress(pixelBuffer, 0);
    if(CVPixelBufferIsPlanar(pixelBuffer)) {
     int count = (int)CVPixelBufferGetPlaneCount(pixelBuffer);
     for(int i=0; i<count; i++) {
     int height = (int)CVPixelBufferGetHeightOfPlane(pixelBuffer,i);
     int stride = (int)CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer,i);
     size += stride*height;
     }
    }else {
     int height = (int)CVPixelBufferGetHeight(pixelBuffer);
     int stride = (int)CVPixelBufferGetBytesPerRow(pixelBuffer);
     size += stride*height;
    }
    CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
    return size;
    }
    // Konversi buffer sampel ke buffer kontinu.
    - (int) convertVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer toNativeBuffer:(void*)nativeBuffer
    {
    if(!sampleBuffer || !nativeBuffer) {
     return -1;
    }
    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    CVPixelBufferLockBaseAddress(pixelBuffer, 0);
    int size = 0;
    if(CVPixelBufferIsPlanar(pixelBuffer)) {
     int count = (int)CVPixelBufferGetPlaneCount(pixelBuffer);
     for(int i=0; i<count; i++) {
     int height = (int)CVPixelBufferGetHeightOfPlane(pixelBuffer,i);
     int stride = (int)CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer,i);
     void *buffer = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, i);
     int8_t *dstPos = (int8_t*)nativeBuffer + size;
     memcpy(dstPos, buffer, stride*height);
     size += stride*height;
     }
    }else {
     int height = (int)CVPixelBufferGetHeight(pixelBuffer);
     int stride = (int)CVPixelBufferGetBytesPerRow(pixelBuffer);
     void *buffer = CVPixelBufferGetBaseAddress(pixelBuffer);
     size += stride*height;
     memcpy(nativeBuffer, buffer, size);
    }
    CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
    return 0;
    }
  5. Masukkan data audio.

  6. Contoh kode:

    /* Hanya data buffer kontinu dalam format PCM eksternal yang didukung. Gunakan sendPCMData untuk mengirim buffer data audio, panjang, dan timestamp. */
    [self.livePusher sendPCMData:pcmData size:size pts:nowTime];

Konfigurasikan watermark

Push SDK menyediakan fitur untuk menambahkan watermark. Anda dapat menambahkan beberapa watermark. Gambar watermark harus dalam format PNG. Contoh kode:

NSString *watermarkBundlePath = [[NSBundle mainBundle] pathForResource:
[NSString stringWithFormat:@"watermark"] ofType:@"png"];// Atur path gambar watermark.
[config addWatermarkWithPath: watermarkBundlePath
 watermarkCoordX:0.1
 watermarkCoordY:0.1
 watermarkWidth:0.3];// Tambahkan watermark.
Catatan
  • coordX, coordY, dan width adalah nilai relatif. Misalnya, watermarkCoordX:0.1 menunjukkan bahwa koordinat x watermark berada di 10% dari sumbu x layar pengambilan. Jika resolusi pengambilan adalah 540 × 960, koordinat x watermark adalah 54.

  • Tinggi gambar watermark diskalakan secara proporsional terhadap 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.

  • Untuk memastikan kejelasan dan kelancaran tepi watermark, gunakan gambar sumber watermark yang memiliki ukuran sama dengan ukuran output watermark. Misalnya, jika resolusi video output adalah 544 × 940 dan lebar tampilan watermark adalah 0.1f, gunakan gambar sumber watermark dengan lebar sekitar 544 × 0.1f = 54.4.

Atur kualitas video

Kualitas video mendukung tiga mode: prioritas resolusi, prioritas kelancaran, dan kustom.

Penting

Untuk mengatur kualitas video, Anda harus mengaktifkan kontrol bitrate: config.enableAutoBitrate = true;

Prioritas resolusi (default)

Dalam mode prioritas resolusi, SDK secara internal mengonfigurasi parameter bitrate untuk memprioritaskan kejelasan video yang diambil.

config.qualityMode = AlivcLivePushQualityModeResolutionFirst;// Mode prioritas resolusi

Prioritas kelancaran

Dalam mode prioritas kelancaran, SDK secara internal mengonfigurasi parameter bitrate untuk memprioritaskan kelancaran video yang diambil.

config.qualityMode = AlivcLivePushQualityModeFluencyFirst;// Mode prioritas kelancaran

Mode kustom

Dalam mode kustom, SDK mengonfigurasi bitrate berdasarkan pengaturan developer. Saat Anda mengatur mode ke kustom, Anda perlu menentukan bitrate awal, bitrate minimum, dan bitrate target.

  • Bitrate awal: Bitrate saat live stream dimulai.

  • Bitrate minimum: Saat jaringan buruk, bitrate secara bertahap menurun hingga mencapai bitrate minimum untuk mengurangi tersendatnya video.

  • Bitrate target: Saat jaringan baik, bitrate secara bertahap meningkat hingga mencapai bitrate target untuk meningkatkan kejelasan video.

config.qualityMode = AlivcLivePushQualityModeCustom// Atur ke mode kustom.
config.targetVideoBitrate = 1400; // Bitrate target adalah 1.400 kbit/s.
config.minVideoBitrate = 600; // Bitrate minimum adalah 600 kbit/s.
config.initialVideoBitrate = 1000; // Bitrate awal adalah 1.000 kbit/s.

Saat Anda mengatur bitrate kustom, rujuk pengaturan yang direkomendasikan oleh Alibaba Cloud untuk mengonfigurasi bitrate yang sesuai. Untuk informasi selengkapnya tentang pengaturan yang direkomendasikan, lihat tabel 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

Saat penyesuaian resolusi dinamis diaktifkan, resolusi aliran pengambilan secara otomatis menurun dalam kondisi jaringan buruk. Hal ini meningkatkan kelancaran dan kejelasan video. Contoh kode:

config.enableAutoResolution = YES; // Aktifkan resolusi adaptif. Nilai default adalah NO.
Penting
  • Resolusi adaptif hanya berlaku saat mode kualitas video diatur ke Prioritas Definisi atau Prioritas Kelancaran. Fitur ini tidak berlaku dalam mode Kustom.

  • Beberapa pemutar mungkin tidak mendukung resolusi dinamis. Jika Anda menggunakan fitur resolusi adaptif, gunakan Pemutar Video Apsara.

Musik latar

Push SDK mendukung pemutaran musik latar, pencampuran audio, penghilangan derau, pemantauan in-ear, dan pembisuan. Panggil operasi API terkait hanya setelah pratinjau dimulai. Kode berikut memberikan contoh:

/* Mulai memutar musik latar. */
[self.livePusher startBGMWithMusicPathAsync:musicPath];
/* Hentikan pemutaran musik latar. Jika Anda ingin mengganti lagu saat musik latar sedang diputar, cukup panggil operasi startBGMWithMusicPathAsync. Anda tidak perlu menghentikan pemutaran saat ini. */
[self.livePusher stopBGMAsync];
/* Jeda musik latar. Panggil operasi ini hanya setelah musik latar mulai diputar. */
[self.livePusher pauseBGM];
/* Lanjutkan musik latar. Panggil operasi ini hanya saat musik latar dijeda. */
[self.livePusher resumeBGM];
/* Aktifkan putar ulang berulang. */
[self.livePusher setBGMLoop:true];
/* Atur sakelar penghilangan derau. Saat diaktifkan, suara non-vokal dalam audio yang ditangkap akan difilter. Hal ini mungkin menyebabkan sedikit penekanan pada suara manusia. Biarkan pengguna memutuskan apakah akan mengaktifkan fitur ini. Fitur ini dinonaktifkan secara default. */
[self.livePusher setAudioDenoise:true];
/* Atur sakelar pemantauan in-ear. Fitur ini terutama digunakan dalam skenario karaoke. Saat diaktifkan, streamer dapat mendengar suaranya sendiri di headphone. Saat dinonaktifkan, streamer tidak dapat mendengar suaranya sendiri. Fitur ini tidak berfungsi jika headphone tidak terhubung. */
[self.livePusher setBGMEarsBack:true];
/* Konfigurasikan pencampuran audio untuk menyesuaikan volume musik latar dan suara manusia yang ditangkap. */
[self.livePusher setBGMVolume:50];// Atur volume musik latar.
[self.livePusher setCaptureVolume:50];// Atur volume suara manusia yang ditangkap.
/* Bisukan audio. Saat dibisukan, baik musik latar maupun suara manusia yang ditangkap akan dibisukan. Untuk membisukan musik atau suara secara terpisah, gunakan operasi pencampuran audio untuk menyesuaikan volumenya. */
[self.livePusher setMute:isMute?true:false];

Ambil tangkapan

Push SDK memungkinkan Anda mengambil tangkapan aliran video lokal. Berikut adalah contoh kode:

/* Atur callback tangkapan. */
[self.livePushersetSnapshotDelegate:self];
/* Panggil API tangkapan. */
[self.livePushersnapshot:1interval:1];

Konfigurasikan fitur retouching

Push SDK Alibaba Cloud menyediakan dua mode retouching: dasar dan lanjutan. Retouching dasar mendukung pemutihan, penghalusan, dan kulit kemerahan. Retouching lanjutan mendukung fitur berbasis pengenalan wajah, seperti pemutihan, penghalusan, kulit kemerahan, pembesaran mata, dan pelangsingan wajah. Fitur ini disediakan oleh SDK Efek Kecantikan. Kode berikut menunjukkan contoh:

#pragma mark - "API untuk jenis dan parameter retouching"/**
* @brief Mengaktifkan atau menonaktifkan jenis retouching.
* @param type Nilai dari QueenBeautyType.
* @param isOpen YES: Mengaktifkan jenis. NO: Menonaktifkan jenis.
*
*/
- (void)setQueenBeautyType:(kQueenBeautyType)type enable:(BOOL)isOpen;
/**
* @brief Mengatur parameter retouching.
* @param param Jenis parameter retouching. Nilai dari QueenBeautyParams.
* @param value Nilai yang akan diatur. Nilai berkisar dari 0 hingga 1. Nilai kurang dari 0 diatur ke 0, dan nilai lebih dari 1 diatur ke 1.
*/
- (void)setQueenBeautyParams:(kQueenBeautyParams)param
value:(float)value;
#pragma mark - "API terkait filter"
/**
* @brief Mengatur gambar filter. Sebelum mengatur gambar filter, aktifkan kQueenBeautyTypeLUT.
* @param imagePath Path gambar filter.
*/
- (void)setLutImagePath:(NSString *)imagePath;
#pragma mark - "API pembentukan wajah"
/**
*@brief Mengatur jenis pembentukan wajah. Sebelum mengatur jenis, aktifkan kQueenBeautyTypeFaceShape.
*@param faceShapeType Jenis pembentukan wajah yang akan diatur. Untuk informasi selengkapnya, lihat QueenBeautyFaceShapeType.
*@param value Nilai yang akan diatur.
*/
- (void)setFaceShape:(kQueenBeautyFaceShapeType)faceShapeType
value:(float)value;
#pragma mark - "API terkait makeup"
/**
* @brief Mengatur jenis makeup dan path aset gambar. Sebelum mengatur makeup, aktifkan kQueenBeautyTypeMakeup.
* @param makeupType Jenis makeup.
* @param imagePaths Kumpulan path ke aset makeup.
* @param blend Jenis pencampuran.
*/
- (void)setMakeupWithType:(kQueenBeautyMakeupType)makeupType
paths:(NSArray<NSString *> *)imagePaths
blendType:(kQueenBeautyBlend)blend;
/**
* @brief Mengatur jenis makeup dan path aset gambar.
* @param makeupType Jenis makeup.
* @param imagePaths Kumpulan path ke aset makeup.
* @param blend Jenis pencampuran.
* @param fps Laju frame.
*/
- (void)setMakeupWithType:(kQueenBeautyMakeupType)makeupType
paths:(NSArray<NSString *> *)imagePaths
blendType:(kQueenBeautyBlend)blend fps:(int)fps;
/**
* @brief Mengatur transparansi makeup. Anda dapat menentukan jenis kelamin.
* @param makeupType Jenis makeup.
* @param isFeMale Menentukan apakah jenis kelamin perempuan. YES: perempuan. NO: laki-laki.
* @param alpha Transparansi makeup.
*/
- (void)setMakeupAlphaWithType:(kQueenBeautyMakeupType)makeupType
female:(BOOL)isFeMale alpha:(float)alpha;
/**
* @brief Mengatur jenis pencampuran untuk makeup.
* @param makeupType Jenis makeup.
* @param blend Jenis pencampuran.
*/
- (void)setMakeupBlendWithType:(kQueenBeautyMakeupType)makeupType
blendType:(kQueenBeautyBlend)blend;
/**
* @brief Menghapus semua makeup.
*/
- (void)resetAllMakeupType;

Sesuaikan parameter retouching secara real-time

Push SDK mendukung penyesuaian parameter retouching secara real-time selama pengambilan aliran. Aktifkan fitur retouching, lalu sesuaikan nilai parameter yang sesuai. Kode berikut menunjukkan contoh:

[_queenEngine setQueenBeautyType:kQueenBeautyTypeSkinBuffing enable:YES];
[_queenEngine setQueenBeautyType:kQueenBeautyTypeSkinWhiting enable:YES];
[_queenEngine setQueenBeautyParams:kQueenBeautyParamsWhitening value:0.8f];
[_queenEngine setQueenBeautyParams:kQueenBeautyParamsSharpen value:0.6f];
[_queenEngine setQueenBeautyParams:kQueenBeautyParamsSkinBuffing value:0.6];

Konfigurasikan fitur kuis live

Fitur kuis live bekerja dengan menyisipkan informasi peningkatan suplemen (SEI) ke dalam aliran live. Pemutar kemudian mengurai SEI tersebut. Push SDK menyediakan metode untuk menyisipkan pesan SEI. Panggil metode ini hanya selama pengambilan aliran. Kode berikut adalah contoh:

/*
msg: Isi pesan SEI yang akan disisipkan ke aliran. Format JSON direkomendasikan. SDK Pemutar Video Apsara dapat menerima dan mengurai pesan ini untuk ditampilkan.
repeatCount: Jumlah frame tempat pesan dikirim. Untuk mencegah pesan SEI dijatuhkan, atur jumlah pengulangan. Misalnya, nilai 100 menyisipkan pesan ke 100 frame berikutnya. Pemutar menghapus duplikat pesan SEI yang identik.
delayTime: Penundaan dalam milidetik sebelum mengirim pesan.
KeyFrameOnly: Menentukan apakah pesan hanya dikirim dalam keyframe.
*/
[self.livePusher sendMessage:@"Informasi pertanyaan" repeatCount:100 delayTime:0 KeyFrameOnly:false];

Adaptasi iPhone X

Secara normal, mengatur tampilan pratinjau ke layar penuh berfungsi dengan benar. Namun, iPhone X memiliki rasio aspek khusus. Hal ini menyebabkan gambar pratinjau meregang saat ditampilkan dalam layar penuh. Jangan gunakan tampilan layar penuh untuk pratinjau di iPhone X.

Ubah ukuran tampilan selama pengambilan aliran

Lalui UIView yang ditetapkan dalam panggilan startPreview atau startPreviewAsync. Ubah frame untuk semua subview dalam tampilan pratinjau. Misalnya:

[self.livePusher startPreviewAsync:self.previewView];
for (UIView *subView in [self.previewView subviews]) {
 // ...
}

Mainkan audio eksternal

Untuk memutar audio eksternal di halaman pengambilan aliran, gunakan AVAudioPlayer karena kit pengembangan perangkat lunak (SDK) sementara tidak kompatibel dengan AudioServicesPlaySystemSound. Setelah pemutaran, perbarui pengaturan AVAudioSession. Berikut adalah contoh kode:

- (void)setupAudioPlayer {
 NSString *filePath = [[NSBundle
mainBundle] pathForResource:@"sound" ofType:@"wav"];
 NSURL *fileUrl = [NSURL URLWithString:filePath];
 self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:nil];
 self.player.volume = 1.0;
 [self.player prepareToPlay];
}
 - (void)playAudio {
 self.player.volume = 1.0;
 [self.player play];
 // Konfigurasikan AVAudioSession.
 AVAudioSession *session = [AVAudioSession sharedInstance];
 [session setMode:AVAudioSessionModeVideoChat error:nil];
 [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
 [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth
| AVAudioSessionCategoryOptionMixWithOthers error:nil];
 [session setActive:YES error:nil];
}

Mode latar belakang dan panggilan telepon

SDK menangani pemrosesan latar belakang secara otomatis. Secara default, saat aplikasi berpindah ke latar belakang, SDK terus mengambil aliran audio dan menjeda video pada frame terakhir. Untuk memastikan aplikasi dapat mengumpulkan audio di latar belakang, buka Capabilities aplikasi Anda, aktifkan Background Mode, dan pilih Audio, AirPlay and Picture in Picture.退后台和接听电话

Untuk menghentikan pengambilan aliran audio saat aplikasi berpindah ke latar belakang, hapus mesin pengambilan aliran. Saat aplikasi kembali ke latar depan, buat ulang mesin untuk melanjutkan aliran.

Catatan

Saat menggunakan metode ini, Anda harus mendengarkan UIApplicationWillResignActiveNotification dan UIApplicationDidBecomeActiveNotification. Metode lain berpotensi menimbulkan ancaman dan dapat menyebabkan error.

Panggilan Balik

Push SDK mencakup callback berikut:

Jenis Callback

Nama Kelas Callback

Callback pengambilan aliran

AlivcLivePusherInfoDelegate

Callback jaringan

AlivcLivePusherNetworkDelegate

Callback error

AlivcLivePusherErrorDelegate

Callback musik latar

AlivcLivePusherBGMDelegate

Callback untuk pemrosesan retouching dan filter eksternal

AlivcLivePusherCustomFilterDelegate

Callback pengambilan aliran

Callback pengambilan aliran memberi tahu aplikasi tentang status SDK. Callback ini mencakup notifikasi saat pratinjau dimulai, frame video pertama dirender, frame audio atau video pertama dikirim, pengambilan aliran dimulai, dan pengambilan aliran dihentikan.

  • onPushStarted: Menunjukkan koneksi ke server berhasil.

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

  • onPushStarted dan onFirstFramePushed: Menunjukkan SDK berhasil memulai pengambilan aliran.

Callback jaringan

Callback jaringan memberi tahu aplikasi tentang status jaringan dan koneksi. Untuk fluktuasi jaringan singkat atau transisi yang berada dalam batas waktu timeout dan batas percobaan ulang koneksi yang ditetapkan di `AlivcLivePushConfig`, SDK secara otomatis menghubungkan ulang. Jika koneksi ulang berhasil, pengambilan aliran dilanjutkan.

  • onConnectFail: Menunjukkan pengambilan aliran gagal. Periksa apakah URL pengambilan tidak valid, mengandung karakter tidak valid, memiliki masalah autentikasi, melebihi batas pengambilan aliran bersamaan, atau berada dalam blacklist yang dinonaktifkan untuk pengambilan. Setelah Anda memastikan URL pengambilan valid dan aktif, coba ambil aliran lagi. Kode error spesifik adalah 0x30020901 hingga 0x30020905 dan 0x30010900 hingga 0x30010901.

  • onConnectionLost: Koneksi terputus. SDK secara otomatis menghubungkan ulang dan mengembalikan `onReconnectStart`. Jika koneksi tidak pulih setelah jumlah maksimum upaya koneksi ulang (`config.connectRetryCount`), `onReconnectError` dikembalikan.

  • onNetworkPoor: Menunjukkan jaringan lambat. Callback ini berarti jaringan saat ini tidak cukup kuat untuk pengambilan aliran, tetapi aliran tidak terputus. Anda dapat menangani logika bisnis Anda di sini, seperti menampilkan notifikasi UI kepada pengguna.

  • onNetworkRecovery: Menunjukkan jaringan telah pulih.

  • onReconnectError: Menunjukkan koneksi ulang gagal. Periksa jaringan saat ini. Saat jaringan pulih, ambil aliran lagi.

  • onSendDataTimeout: Menunjukkan timeout pengiriman data. Periksa jaringan saat ini. Saat jaringan pulih, hentikan pengambilan aliran saat ini lalu mulai yang baru.

  • onPushURLAuthenticationOverdue: Menunjukkan penandatanganan URL untuk URL pengambilan saat ini telah kedaluwarsa. Anda harus memberikan URL baru ke SDK.

Callback error

  • onSystemError: Terjadi error perangkat sistem. Anda harus menghapus engine dan mencoba lagi.

  • onSDKError: Terjadi error SDK. Tangani error berdasarkan kode error:

    • Jika kode error adalah 805438211, hal ini menunjukkan performa perangkat buruk dan laju frame rendah untuk penyandian dan rendering. Beri tahu streamer dan hentikan logika bisnis yang memakan waktu, seperti retouching lanjutan dan animasi, di lapisan aplikasi.

    • Anda harus menangani callback saat aplikasi tidak memiliki izin mikrofon atau kamera. Kode error untuk izin mikrofon yang hilang adalah 268455940. Kode error untuk izin kamera yang hilang adalah 268455939.

    • Untuk semua error lainnya, cukup catat dalam log. Tidak diperlukan tindakan lain.

Callback musik latar

  • onOpenFailed: Musik latar gagal dimulai. Periksa apakah file musik valid dan path-nya benar. Panggil metode startBGMWithMusicPathAsync untuk mencoba memutarnya lagi.

  • onDownloadTimeout: Terjadi timeout selama pemutaran musik latar. Hal ini sering terjadi saat memutar musik latar dari URL jaringan. Minta streamer untuk memeriksa status jaringan saat ini. Panggil metode startBGMWithMusicPathAsync untuk memutar musik lagi.

Callback untuk pemrosesan retouching dan filter eksternal

Gunakan callback AlivcLivePusherCustomFilterDelegate untuk mengintegrasikan dengan SDK retouching pihak ketiga. Hal ini memungkinkan Anda mengimplementasikan fitur retouching dasar dan lanjutan. Tujuan utama AlivcLivePusherCustomFilterDelegate adalah menyediakan tekstur internal atau CVPixelBuffer dari Push SDK ke SDK retouching untuk diproses. SDK retouching kemudian mengembalikan tekstur atau CVPixelBuffer yang telah diproses ke Push SDK untuk menerapkan efek retouching.

Atur sakelar livePushMode di AlivcLivePushConfig ke AlivcLivePushBasicMode. SDK menggunakan AlivcLivePusherCustomFilterDelegate untuk mengembalikan ID tekstur, bukan CVPixelBuffer. Callback intinya adalah sebagai berikut:

  • onCreate: Konteks OpenGL dibuat. Callback ini biasanya digunakan untuk menginisialisasi engine retouching.

  • onProcess: Callback pembaruan tekstur OpenGL yang menerima ID tekstur asli dari SDK. Di dalam callback ini, Anda dapat memanggil metode retouching dan mengembalikan ID tekstur yang telah diproses.

  • onDestroy: Konteks OpenGL dihapus. Callback ini biasanya digunakan untuk menghapus mesin Retouching.

Metode dan antarmuka umum

/* Dalam mode kustom, Anda dapat menyesuaikan bitrate minimum dan target secara real-time. */
[self.livePusher setTargetVideoBitrate:800];
[self.livePusher setMinVideoBitrate:200]
/* Dapatkan status pengambilan aliran. */
BOOL isPushing = [self.livePusher isPushing]; 
/* Dapatkan URL pengambilan. */
NSString *pushURLString = [self.livePusher getPushURL];
/* Dapatkan informasi performa dan debugging pengambilan aliran. Untuk detail metrik performa, lihat dokumentasi API atau komentar dalam kode. */
AlivcLivePushStatsInfo *info = [self.livePusher getLivePushStatusInfo];
/* Dapatkan nomor versi SDK. */
NSString *sdkVersion = [self.livePusher getSDKVersion];
/* Atur tingkat log untuk memfilter informasi debugging sesuai kebutuhan. */
[self.livePusher setLogLevel:(AlivcLivePushLogLevelDebug)];

Alat debugging

SDK menyediakan alat debugging UI DebugView, jendela mengambang global yang dapat dipindahkan dan selalu ditampilkan di atas tampilan. Alat ini mencakup fitur debugging seperti melihat log pengambilan aliran, deteksi real-time metrik performa pengambilan aliran, dan grafik garis metrik performa utama.

Catatan

Dalam versi rilis, jangan panggil metode untuk membuka DebugView.

Contoh kode:

[AlivcLivePusher showDebugView];// Buka DebugView.

Dokumentasi API

Dokumentasi API Edisi Dasar

FAQ

Kegagalan Pengambilan Aliran

Gunakan alat troubleshooting untuk memeriksa apakah URL pengambilan valid.

Bagaimana cara mendapatkan informasi tentang aliran yang diambil?

Buka Stream Management dan lihat aliran audio dan video yang masuk di Active Streams.

Bagaimana cara memutar aliran?

Setelah Anda memulai pengambilan aliran, gunakan pemutar (seperti Pemutar Video Apsara, FFplay, atau VLC) untuk menguji penarikan aliran. Untuk mendapatkan URL pemutaran, lihat Hasilkan URL streaming.

Aplikasi gagal dalam tinjauan App Store

Binari RtsSDK adalah pustaka fat yang berisi slice perangkat dan emulator. Apple menolak IPA yang berisi arsitektur emulator. Gunakan lipo -remove untuk menghapus arsitektur x86_64.