All Products
Search
Document Center

ApsaraVideo Live:Penggunaan fitur

Last Updated:Aug 14, 2026

Topik ini menjelaskan antarmuka dan alur kerja dasar Push SDK untuk iOS serta menyediakan contoh penggunaan untuk fitur-fitur utama.

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 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 waktu nyata 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 encoding software dan hardware untuk file video, sehingga meningkatkan stabilitas modul encoding.

Batasan

Perhatikan batasan berikut sebelum menggunakan Push SDK untuk iOS:

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

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

  • Dalam mode encoding hardware, 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 untuk Edisi Dasar

Alur kerja

Alur kerja dasar adalah sebagai berikut:

  1. Daftarkan SDK

  2. Konfigurasikan parameter pengambilan aliran

  3. Mulai pengambilan aliran

Menggunakan fitur

Daftarkan SDK

Untuk mengajukan dan mengonfigurasi lisensi, lihat Integrasikan lisensi Push SDK.

Catatan

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

Panggil antarmuka pendaftaran lisensi pada tahap early (sebelum menggunakan Push SDK).

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

  • Metode onLicenceCheck dari antarmuka AlivcLiveBase#setObserver memungkinkan Anda memeriksa secara asinkron apakah konfigurasi lisensi berhasil.

Konfigurasikan parameter aliran

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

Parameter dasar pengambilan aliran memiliki nilai default yang direkomendasikan, sehingga memungkinkan inisialisasi sederhana tanpa konfigurasi tambahan.

AlivcLivePushConfig *config = [[AlivcLivePushConfig alloc] init];// Inisialisasi kelas konfigurasi pengambilan aliran. Anda juga dapat menggunakan initWithResolution.
config.resolution = AlivcLivePushResolution540P;// Resolusi default adalah 540p. Maksimum adalah 720p.
config.fps = AlivcLivePushFPS20; // Kami merekomendasikan laju frame 20 fps.
config.enableAutoBitrate = true; // Aktifkan kontrol bitrate. Nilai default adalah true.
config.videoEncodeGop = AlivcLivePushVideoEncodeGOP_2;// Nilai default adalah 2. Interval keyframe yang lebih besar menghasilkan latensi lebih tinggi. Kami merekomendasikan nilai 1 atau 2.
config.connectRetryInterval = 2000; // Interval koneksi ulang dalam milidetik. Default adalah 2000 ms (2 detik). Interval minimal harus 1 detik. Kami merekomendasikan menggunakan nilai default.
config.previewMirror = false; // Nilai default adalah false. Dalam kondisi normal, ini harus false.
config.orientation = AlivcLivePushOrientationPortrait; // Orientasi default adalah portrait. Anda dapat mengaturnya ke landscape dengan tombol home di kiri atau kanan.
Penting
  • Mempertimbangkan performa perangkat mobile dan lebar pita jaringan, kami merekomendasikan 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 antara bitrate target dan minimum yang ditetapkan. Hal ini dapat menyebabkan tersendat saat pemutaran dalam kondisi jaringan tidak stabil. Gunakan pengaturan ini dengan hati-hati.

Ambil aliran kamera

  1. Inisialisasi SDK.

    Setelah Anda mengonfigurasi parameter pengambilan aliran, panggil metode initWithConfig untuk menginisialisasi SDK. Contoh kode:

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

    AlivcLivePusher tidak mendukung beberapa instans. Oleh karena itu, setiap pemanggilan init harus dipasangkan dengan pemanggilan 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 delegasi 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. Anda perlu meneruskan tampilan display, yang harus merupakan subclass dari UIView, untuk pratinjau kamera. Contoh kode:

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

    Anda hanya dapat memulai pengambilan aliran setelah pratinjau berhasil. Untuk melakukan ini, dengarkan callback onPreviewStarted dari AlivcLivePusherInfoDelegate dan tambahkan kode berikut di dalam callback tersebut.

    [self.livePusher startPushWithURL:@"Test ingest URL (rtmp://......)"];
    Catatan
    • URL ingest mendukung protokol RTMP dan RTS (artc://). Untuk mendapatkan URL, lihat Hasilkan URL ingest dan streaming.

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

Kontrol kamera

Anda hanya dapat memanggil metode terkait kamera setelah pratinjau dimulai, misalnya selama pengambilan aliran, dalam keadaan jeda, atau selama koneksi ulang. Metode ini memungkinkan Anda beralih kamera, mengontrol flash, menyesuaikan fokus, zoom, dan mengatur mirroring. Memanggil metode ini sebelum pratinjau dimulai tidak berpengaruh.

/* Beralih antara kamera depan dan belakang. */
[self.livePusher switchCamera];
/* Nyalakan atau matikan flash. Flash tidak tersedia pada kamera depan. */
[self.livePusher setFlash:false]; 
/* Sesuaikan panjang fokus untuk memperbesar gambar yang ditangkap. Nilai positif memperbesar, dan nilai negatif memperkecil. */
CGFloat max = [_livePusher getMaxZoom];
[self.livePusher setZoom:MIN(1.0, max)]; 
/* Atur fokus secara manual. Anda harus meneruskan dua parameter: 1. point: koordinat titik fokus; 2. autoFocus: apakah akan mengaktifkan autofokus untuk tindakan spesifik ini. Perilaku autofokus berikutnya mengikuti nilai yang telah diatur sebelumnya. */
[self.livePusher focusCameraAtAdjustedPoint:CGPointMake(50, 50) autoFocus:true];
/* Aktifkan atau nonaktifkan autofokus. */
[self.livePusher setAutoFocus:false];
/* Konfigurasikan mirroring. Terdapat dua antarmuka mirroring: PushMirror untuk aliran yang diambil dan PreviewMirror untuk pratinjau. PushMirror hanya memengaruhi tampilan pemutaran, sedangkan PreviewMirror hanya memengaruhi tampilan pratinjau. Keduanya independen. */
[self.livePusher setPushMirror:false];
[self.livePusher setPreviewMirror:false];

Kontrol pengambilan

Kontrol pengambilan aliran mencakup mulai, henti, jeda, lanjutkan, mulai ulang, dan hapus. Anda dapat menambahkan tombol ke UI Anda untuk memicu operasi ini sesuai kebutuhan aplikasi Anda. Contoh kode:

/* Atur pauseImage lalu panggil pause untuk beralih dari streaming kamera ke streaming gambar statis. Pengambilan audio berlanjut. */
[self.livePusher pause];
/* Beralih dari streaming gambar statis kembali ke streaming kamera. Pengambilan audio berlanjut. */
[self.livePusher resume];
/* Hentikan pengambilan aliran saat ini. Ini hanya dapat dipanggil saat aliran aktif. */
[self.livePusher stopPush];
/* Hentikan pratinjau. Ini hanya dapat dipanggil saat dalam status pratinjau, bukan selama pengambilan aliran aktif. Setelah dihentikan, tampilan pratinjau akan membeku pada frame terakhir. */
[self.livePusher stopPreview];
/* Mulai ulang aliran. Ini dapat dipanggil selama pengambilan aliran aktif atau dalam status eror. Dalam status eror, Anda hanya dapat memanggil metode ini, reconnectPushAsync, atau destroy. Ini akan memulai ulang semua sumber daya AlivcLivePusher internal, termasuk pratinjau dan pengambilan aliran. */
[self.livePusher restartPush];
/* Sambungkan kembali aliran secara asinkron. Ini dapat dipanggil selama aliran aktif atau dalam status eror terkait jaringan dari AlivcLivePusherNetworkDelegate. Dalam status eror, Anda juga dapat memanggil restartPush atau destroy. Aksi ini mencoba membangun kembali koneksi RTMP. */
[self.livePusher reconnectPushAsync];
/* Hapus instans pengambilan aliran. Ini akan menghentikan pengambilan aliran dan pratinjau, serta menghapus tampilan pratinjau. Semua sumber daya yang terkait dengan AlivcLivePusher akan dibebaskan. */
[self.livePusher destory];
self.livePusher = nil;
/* Dapatkan status pengambilan aliran saat ini. */
AlivcLivePushStatus status = [self.livePusher getLiveStatus];

Pengambilan berbagi layar

ReplayKit, yang diperkenalkan di iOS 9, mendukung perekaman layar. iOS 10 memungkinkan ReplayKit menyiarkan konten layar secara langsung melalui ekstensi aplikasi pihak ketiga. Pada iOS 10 dan versi lebih baru, Anda dapat menggunakan Push SDK dengan ekstensi aplikasi untuk mengimplementasikan siaran langsung berbagi layar.

Untuk memastikan performa sistem, iOS mengalokasikan resource terbatas untuk ekstensi perekaman layar. Jika ekstensi menggunakan terlalu banyak memori, sistem akan menghentikannya. Untuk mengatasi keterbatasan memori ini, Push SDK membagi proses berbagi layar antara Extension App dan Host App. Extension App menangkap konten layar dan mengirimkannya ke Host App melalui komunikasi antar-proses. Host App membuat engine AlivcLivePusher dan mengambil data layar ke server. Karena seluruh proses pengambilan aliran ditangani di Host App, pengambilan dan transmisi mikrofon juga dapat dikelola oleh Host App, sehingga Extension App hanya bertanggung jawab untuk menangkap layar.

Penting

Demo Push SDK menggunakan App Group untuk komunikasi antar-proses antara Extension App dan Host App. Logika ini dikemas dalam AlivcLibReplayKitExt.framework.

Untuk mengimplementasikan berbagi layar di iOS, Anda harus membuat ekstensi perekaman layar. Sistem akan membuat instans ekstensi ini saat diperlukan untuk menerima gambar layar yang ditangkap.

  1. Buat App Group.

    Login ke Apple Developer dan ikuti langkah-langkah berikut:

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

    2. Kembali ke halaman Identifier, pilih App IDs, lalu klik App ID Anda untuk mengaktifkan kemampuan App Group. Anda harus melakukan konfigurasi yang sama untuk ID Host App dan Extension App. Untuk informasi lebih lanjut, lihat Aktifkan App Group.

    3. Setelah konfigurasi selesai, unduh Provisioning Profile yang diperbarui dan instal di Xcode.

    Setelah langkah-langkah ini diselesaikan dengan benar, Extension App dan Host App dapat berkomunikasi satu sama lain.

    Catatan

    Setelah membuat App Group, simpan App Group Identifier. Anda akan membutuhkannya di langkah berikutnya.

  2. Buat ekstensi perekaman layar.

    Demo Push SDK untuk iOS mencakup ekstensi AlivcLiveBroadcast dan AlivcLiveBroadcastSetupUI untuk berbagi layar. Untuk membuat ekstensi perekaman layar di aplikasi Anda, ikuti langkah-langkah berikut:

    1. Di proyek yang sudah ada, pilih New > Target… dan pilih Broadcast Upload Extension.

    2. Ubah Product Name, centang kotak Include UI Extension, lalu klik Finish untuk membuat ekstensi broadcast dan UI. Misalnya, atur Product Name menjadi AlivcLiveBroadcast.

    3. Konfigurasikan file Info.plist untuk ekstensi broadcast. Di target baru, Xcode secara otomatis membuat file header dan file sumber bernama SampleHandler. Direktori target ini bernama AlivcLiveBroadcast.

      Seret AlivcLibReplayKitExt.framework ke proyek Anda dan hubungkan sebagai dependensi untuk target ekstensi. Ganti kode di SampleHandler.m dengan kode berikut. Anda harus mengganti kAPPGROUP dalam kode dengan App Group Identifier yang Anda buat di Langkah 1. Contoh kode:

      
      #import "SampleHandler.h"
      #import <AlivcLibReplayKitExt/AlivcLibReplayKitExt.h>
      
      @implementation SampleHandler
      
      - (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *>
      *)setupInfo {
      
       // Pengguna telah meminta untuk memulai siaran. Informasi setup dari ekstensi UI dapat
      diberikan tetapi opsional.
       [[AlivcReplayKitExt sharedInstance] setAppGroup:kAPPGROUP];
      }
      
      - (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
       if (sampleBufferType != RPSampleBufferTypeAudioMic) {
       // Audio ditangkap dan dikirim oleh Host App.
       [[AlivcReplayKitExt sharedInstance] sendSampleBuffer:sampleBuffer withType:sampleBufferType];
       }
      }
      
      - (void)broadcastFinished {
      
       [[AlivcReplayKitExt sharedInstance] finishBroadcast];
      }
      @end
      
      

    Di proyek Anda, buat target untuk Broadcast Upload Extension dan integrasikan AlivcLibReplayKitExt.framework, yang disesuaikan untuk modul ekstensi perekaman layar, ke target tersebut.

  3. Integrasikan live SDK ke Host App.

    Di Host App, buat objek AlivcLivePushConfig dan AlivcLivePusher. Atur ExternMainStream ke true dan AudioFromExternal ke false. Konfigurasi ini berarti audio masih ditangkap oleh SDK. Panggil startScreenCapture untuk mulai menerima data layar dari Extension App, lalu mulai dan hentikan pengambilan aliran. Ikuti langkah-langkah spesifik berikut:

    1. Tambahkan dependensi pada AlivcLivePusher.framework, AlivcLibRtmp.framework, RtsSDK.framework, dan AlivcLibReplayKitExt.framework ke proses Host App.

    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 seperti yang ditunjukkan pada 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 mengelola fungsi live streaming dengan memanggil metode berikut:

      • Mulai menerima data perekaman layar.

        Anda harus mengganti kAPPGroup dalam kode dengan App Group Identifier yang Anda buat sebelumnya. 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 aliran yang diambil.

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

  • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT: (Default) Pratinjau mempertahankan rasio aspek video. Jika rasio aspek video dan jendela berbeda, pratinjau akan memiliki bilah hitam.

  • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: Pratinjau memotong video agar sesuai dengan rasio aspek jendela. Jika rasio aspek video dan jendela berbeda, video akan dipotong.

    Contoh kode:

mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);
Catatan
  • Anda dapat mengatur mode di AlivcLivePushConfig atau mengaturnya secara dinamis menggunakan API setpreviewDisplayMode selama pratinjau atau pengambilan aliran.

  • Pengaturan ini hanya memengaruhi pratinjau. Resolusi aliran video yang diambil ditentukan oleh AlivcLivePushConfig dan tidak terpengaruh oleh mode pratinjau. Mode tampilan pratinjau dirancang untuk beradaptasi dengan berbagai ukuran layar ponsel, memungkinkan Anda memilih efek pratinjau terbaik.

Pengambilan gambar

SDK dapat mengambil gambar statis saat aplikasi berada di latar belakang atau bitrate terlalu rendah. Saat aplikasi berada di latar belakang, pengambilan video dijeda secara default, dan hanya audio yang diambil. Pada saat ini, Anda dapat mengatur gambar untuk dialirkan. Misalnya, Anda dapat menampilkan gambar dengan pesan seperti Host akan kembali sebentar lagi. Contoh kode:

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

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

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

Pengambilan audio dan video eksternal

Push SDK mendukung pengambilan audio dan video dari sumber 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. Di sini, diatur ke YUVNV21. Anda dapat mengaturnya ke format lain sesuai kebutuhan.
    config.externAudioFormat = AlivcLivePushAudioFormatS16;// Atur format kedalaman bit data audio. Di sini, diatur ke S16. Anda dapat mengaturnya ke format lain sesuai kebutuhan.
  3. Masukkan data video eksternal.

  4. Contoh kode:

    /* Antarmuka sendVideoData hanya mendukung data buffer kontinu dalam format video eksternal seperti YUV dan RGB. Anda dapat menggunakannya untuk 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 ukuran sample buffer.
    - (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 sample buffer 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 yang didukung. Gunakan sendPCMData untuk mengirim buffer data audio, ukuran, dan timestamp. */
    [self.livePusher sendPCMData:pcmData size:size pts:nowTime];

Konfigurasikan watermark

Push SDK memungkinkan Anda 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
  • Parameter coordX, coordY, dan width adalah nilai relatif. Misalnya, watermarkCoordX:0.1 menempatkan posisi x watermark pada 10% dari lebar total aliran. Jika resolusi aliran adalah 540×960, posisi x watermark akan berada di 54.

  • Tinggi gambar watermark diskalakan secara proporsional berdasarkan rasio aspek aslinya dan nilai width yang ditentukan.

  • Untuk mengimplementasikan watermark teks, pertama-tama konversi teks menjadi gambar, lalu gunakan antarmuka ini untuk menambahkan gambar sebagai watermark.

  • Untuk memastikan kejelasan dan tepi yang halus pada watermark, gunakan gambar sumber yang memiliki dimensi sama dengan ukuran output akhir watermark. Misalnya, jika resolusi video output adalah 544×940 dan lebar relatif watermark adalah 0.1f, lebar ideal gambar sumber sekitar 54,4 piksel (544 × 0,1).

Konfigurasikan kualitas video

Tiga mode kualitas video didukung: mode prioritas resolusi, mode prioritas kelancaran, dan mode kustom.

Penting

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

Mode prioritas resolusi (default)

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

config.qualityMode = AlivcLivePushQualityModeResolutionFirst; // Mode prioritas resolusi

Mode prioritas kelancaran

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

config.qualityMode = AlivcLivePushQualityModeFluencyFirst; // Mode prioritas kelancaran

Mode kustom

Dalam mode kustom, SDK mengonfigurasi aliran berdasarkan bitrate yang Anda atur. Saat menggunakan mode kustom, Anda perlu menentukan bitrate awal, minimum, dan target.

  • Bitrate awal: Bitrate saat awal live streaming.

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

  • Bitrate target: Saat koneksi 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: 1400 Kbps
config.minVideoBitrate = 600; // Bitrate minimum: 600 Kbps
config.initialVideoBitrate = 1000; // Bitrate awal: 1000 Kbps

Saat mengatur bitrate kustom, rujuk pengaturan yang direkomendasikan oleh Alibaba Cloud. Pengaturan yang direkomendasikan disediakan dalam 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 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

Saat resolusi adaptif diaktifkan, SDK secara otomatis menurunkan resolusi dalam kondisi jaringan buruk untuk meningkatkan kelancaran video.

config.enableAutoResolution = YES; // Aktifkan resolusi adaptif. Ini dinonaktifkan secara default (NO).
Penting
  • Resolusi adaptif hanya berlaku saat mode Kualitas video diatur ke Clarity First atau Fluency First, tetapi tidak dalam mode kustom.

  • Beberapa pemutar mungkin tidak mendukung perubahan resolusi dinamis. Jika Anda perlu menggunakan fitur resolusi adaptif, kami merekomendasikan menggunakan ApsaraVideo Player.

Musik latar

Push SDK mendukung pemutaran musik latar, pencampuran audio, penghilangan derau, pemantauan in-ear, dan pembisuan. Anda hanya dapat memanggil antarmuka terkait musik latar setelah pratinjau dimulai. Contoh kode:

/* Mulai memutar musik latar. */
[self.livePusher startBGMWithMusicPathAsync:musicPath];
/* Hentikan pemutaran musik latar. Jika musik latar sudah diputar dan Anda perlu mengganti lagu, Anda hanya perlu memanggil antarmuka mulai memutar lagi. Anda tidak perlu menghentikan musik latar saat ini terlebih dahulu. */
[self.livePusher stopBGMAsync];
/* Jeda musik latar. Ini hanya dapat dipanggil setelah musik latar mulai diputar. */
[self.livePusher pauseBGM];
/* Lanjutkan pemutaran musik latar. Ini hanya dapat dipanggil saat musik latar dijeda. */
[self.livePusher resumeBGM];
/* Aktifkan pengulangan untuk musik. */
[self.livePusher setBGMLoop:true];
/* Atur sakelar penghilangan derau. Saat diaktifkan, suara non-manusia dalam audio yang ditangkap akan difilter. Hal ini mungkin sedikit menekan suara manusia. Kami merekomendasikan agar pengguna memilih 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, suara host terdengar di headphone. Saat dinonaktifkan, suara tidak terdengar. Pemantauan in-ear tidak berfungsi jika tidak ada headphone yang terhubung. */
[self.livePusher setBGMEarsBack:true];
/* Konfigurasikan pencampuran audio untuk menyesuaikan volume musik latar dan suara yang ditangkap. */
[self.livePusher setBGMVolume:50];// Atur volume musik latar.
[self.livePusher setCaptureVolume:50];// Atur volume suara yang ditangkap.
/* Atur bisu. Saat dibisukan, baik musik maupun input suara dibungkam. Untuk membisukan hanya musik atau suara, gunakan pengaturan volume pencampuran audio. */
[self.livePusher setMute:isMute?true:false];

Tangkapan aliran

Push SDK menyediakan fitur untuk mengambil tangkapan dari aliran video lokal. Contoh kode:

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

Konfigurasikan retouching

Push SDK ApsaraVideo Live menawarkan dua mode retouching: dasar dan lanjutan. Retouching dasar mencakup pemutihan kulit, penghalusan, dan penambahan warna kemerahan. Retouching lanjutan mendukung pemutihan berbasis pengenalan wajah, penghalusan, warna kemerahan, pembesaran mata, dan pelangsingan wajah. Fitur ini disediakan oleh Queen SDK. Contoh kode:

#pragma mark - "API untuk Jenis dan Parameter Retouching"/**
* @brief Mengaktifkan atau menonaktifkan jenis retouching tertentu.
* @param type Nilai dari QueenBeautyType.
* @param isOpen YES: aktifkan, NO: nonaktifkan.
*
*/
- (void)setQueenBeautyType:(kQueenBeautyType)type enable:(BOOL)isOpen;
/**
* @brief Mengatur parameter retouching.
* @param param Jenis parameter retouching, salah satu dari QueenBeautyParams.
* @param value Nilai yang diatur, berkisar dari [0,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 untuk Filter"
/**
* @brief Mengatur gambar filter. kQueenBeautyTypeLUT harus diaktifkan sebelum mengatur gambar filter.
* @param imagePath Path ke gambar filter yang akan diatur.
*/
- (void)setLutImagePath:(NSString *)imagePath;
#pragma mark - "API untuk Pembentukan Wajah"
/**
*@brief Mengatur jenis pembentukan wajah. kQueenBeautyTypeFaceShape harus diaktifkan sebelum pengaturan.
*@param faceShapeType Jenis pembentukan wajah yang diatur, lihat QueenBeautyFaceShapeType.
*@param value Nilai yang diatur.
*/
- (void)setFaceShape:(kQueenBeautyFaceShapeType)faceShapeType
value:(float)value;
#pragma mark - "API untuk Tata Rias"
/**
* @brief Mengatur jenis tata rias dan path aset material. kQueenBeautyTypeMakeup harus diaktifkan sebelum mengatur tata rias.
* @param makeupType Jenis tata rias.
* @param imagePaths Koleksi path ke aset material tata rias.
* @param blend Jenis campuran.
*/
- (void)setMakeupWithType:(kQueenBeautyMakeupType)makeupType
paths:(NSArray<NSString *> *)imagePaths
blendType:(kQueenBeautyBlend)blend;
/**
* @brief Mengatur jenis tata rias dan path aset material.
* @param makeupType Jenis tata rias.
* @param imagePaths Koleksi path ke aset material tata rias.
* @param blend Jenis campuran.
* @param fps Laju frame yang sesuai.
*/
- (void)setMakeupWithType:(kQueenBeautyMakeupType)makeupType
paths:(NSArray<NSString *> *)imagePaths
blendType:(kQueenBeautyBlend)blend fps:(int)fps;
/**
* @brief Mengatur transparansi tata rias, dengan opsi untuk menentukan jenis kelamin.
* @param makeupType Jenis tata rias.
* @param isFeMale Apakah pengguna perempuan. YES untuk perempuan, NO untuk laki-laki.
* @param alpha Transparansi tata rias.
*/
- (void)setMakeupAlphaWithType:(kQueenBeautyMakeupType)makeupType
female:(BOOL)isFeMale alpha:(float)alpha;
/**
* @brief Mengatur jenis campuran untuk jenis tata rias.
* @param makeupType Jenis tata rias.
* @param blend Jenis campuran.
*/
- (void)setMakeupBlendWithType:(kQueenBeautyMakeupType)makeupType
blendType:(kQueenBeautyBlend)blend;
/**
* @brief Menghapus semua efek tata rias.
*/
- (void)resetAllMakeupType;

Penyesuaian parameter waktu nyata

Push SDK mendukung penyesuaian parameter retouching secara waktu nyata selama pengambilan aliran. Aktifkan sakelar retouching dan sesuaikan nilai parameter yang sesuai. Contoh kode:

[_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 kuis langsung

Fitur kuis langsung bekerja dengan menyisipkan pesan SEI ke dalam aliran langsung untuk diurai oleh pemutar. Push SDK menyediakan antarmuka untuk menyisipkan SEI. Anda hanya dapat memanggil antarmuka ini saat pengambilan aliran aktif. Contoh kode:

/*
msg: Isi pesan SEI yang akan disisipkan ke aliran. Kami merekomendasikan menggunakan format JSON. SDK Pemutar Video Apsara dapat menerima pesan SEI ini, menguraikannya, dan menampilkan kontennya.
repeatCount: Jumlah frame untuk dikirim. Untuk memastikan pesan SEI tidak dijatuhkan, Anda harus mengatur jumlah pengulangan. Misalnya, nilai 100 menyisipkan pesan SEI ini ke 100 frame berikutnya. Pemutar akan menghapus duplikat pesan SEI yang identik.
delayTime: Penundaan dalam milidetik sebelum mengirim.
KeyFrameOnly: Apakah hanya mengirim pada keyframe.
*/
[self.livePusher sendMessage:@"Informasi Pertanyaan" repeatCount:100 delayTime:0 KeyFrameOnly:false];

Adaptasi iPhone X

Dalam sebagian besar skenario, mengatur frame tampilan pratinjau ke layar penuh berfungsi dengan benar. Namun, pada iPhone X, pratinjau layar penuh mungkin tampak meregang karena rasio aspek unik perangkat tersebut. Kami merekomendasikan untuk menghindari tampilan layar penuh untuk pratinjau pada iPhone X.

Ubah ukuran tampilan selama pengambilan

Lakukan iterasi melalui UIView yang Anda tetapkan saat memanggil antarmuka startPreview atau startPreviewAsync. Ubah frame untuk semua subview dari tampilan pratinjau. Misalnya:

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

Efek suara eksternal

Jika Anda perlu memutar efek suara atau musik di halaman pengambilan aliran, kami merekomendasikan menggunakan AVAudioPlayer, karena SDK saat ini bertentangan dengan AudioServicesPlaySystemSound. Setelah pemutaran, Anda perlu memperbarui pengaturan AVAudioSession. Berikut adalah contoh kode untuk memutar efek suara dengan AVAudioPlayer:

- (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 mode latar belakang secara internal, sehingga tidak diperlukan tindakan dari Anda. Secara default, saat aplikasi masuk ke latar belakang, SDK terus mengambil audio sementara aliran video dijeda pada frame terakhir. Anda perlu mengaktifkan kemampuan Background Modes di aplikasi Anda dan memilih Audio, AirPlay and Picture in Picture. Hal ini memastikan bahwa aplikasi Anda dapat menangkap audio di latar belakang.

Jika Anda ingin menghentikan pengambilan audio saat aplikasi berada di latar belakang, Anda harus menghapus engine pengambilan aliran saat aplikasi masuk ke latar belakang dan membuatnya kembali saat aplikasi menjadi aktif lagi.

Catatan

Jika Anda menggunakan metode ini, Anda harus mendengarkan UIApplicationWillResignActiveNotification dan UIApplicationDidBecomeActiveNotification. Menggunakan metode lain dapat menimbulkan risiko.

Callbacks

Push SDK mencakup callback utama berikut:

Jenis callback

Nama kelas

Callback pengambilan aliran

AlivcLivePusherInfoDelegate

Callback terkait jaringan

AlivcLivePusherNetworkDelegate

Callback kesalahan

AlivcLivePusherErrorDelegate

Callback musik latar

AlivcLivePusherBGMDelegate

Callback untuk pemrosesan retouching dan filter eksternal

AlivcLivePusherCustomFilterDelegate

Ingest callbacks

Callback pengambilan aliran melaporkan status SDK, seperti saat pratinjau dimulai, frame video pertama dirender, frame audio atau video pertama dikirim, dan saat pengambilan aliran dimulai dan dihentikan.

  • onPushStarted: Menunjukkan koneksi ke server berhasil.

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

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

Callback jaringan

Callback terkait jaringan memberi tahu aplikasi tentang status jaringan dan koneksi. Untuk fluktuasi jaringan singkat atau pergantian yang berada dalam batas timeout koneksi ulang dan jumlah percobaan ulang yang diatur di AlivcLivePushConfig, SDK secara otomatis mencoba menghubungkan kembali. Jika koneksi ulang berhasil, pengambilan aliran berlanjut.

  • onConnectFail: Menunjukkan bahwa pengambilan aliran gagal. Periksa apakah URL ingest tidak valid, berisi karakter ilegal, memiliki masalah autentikasi, melebihi batas maksimum aliran konkuren, atau berada dalam daftar penolakan. Pastikan URL ingest valid dan tersedia sebelum mencoba lagi. Kode kesalahan spesifik berada dalam rentang 0x30020901 hingga 0x30020905 dan 0x30010900 hingga 0x30010901.

  • onConnectionLost: Dipicu saat koneksi terputus. SDK secara otomatis mencoba menghubungkan kembali dan memicu onReconnectStart. Jika koneksi tidak dapat dipulihkan setelah jumlah maksimum percobaan ulang (config.connectRetryCount), onReconnectError dipicu.

  • onNetworkPoor: Dipicu saat kondisi jaringan lambat. Ini menunjukkan jaringan tidak cukup untuk streaming yang stabil, tetapi pengambilan masih aktif. Anda dapat menangani logika bisnis Anda di sini, seperti menampilkan notifikasi UI kepada pengguna.

  • onNetworkRecovery: Dipicu saat koneksi jaringan dipulihkan.

  • onReconnectError: Callback untuk kegagalan koneksi ulang. Ini menunjukkan bahwa upaya koneksi ulang gagal. Kami merekomendasikan untuk memeriksa jaringan saat ini dan memulai ulang aliran saat jaringan pulih.

  • onSendDataTimeout: Callback untuk timeout pengiriman data. Kami merekomendasikan untuk memeriksa jaringan saat ini, menghentikan aliran, lalu memulainya kembali saat jaringan pulih.

  • onPushURLAuthenticationOverdue: Callback yang menunjukkan bahwa autentikasi untuk URL ingest saat ini telah kedaluwarsa. Anda perlu memberikan URL baru ke SDK.

Callback kesalahan

  • onSystemError: Callback untuk pengecualian perangkat sistem. Anda perlu menghapus engine dan mencoba lagi.

  • onSDKError: Callback untuk error SDK. Anda perlu menangani error berbeda berdasarkan kode mereka:

    • Jika kode error adalah 805438211, ini menunjukkan performa perangkat buruk dan laju frame encoding serta rendering rendah. Anda harus memberi tahu host dan menghentikan logika bisnis yang intensif sumber daya di lapisan aplikasi, seperti retouching lanjutan atau animasi.

    • Anda harus menangani callback untuk izin mikrofon dan kamera yang hilang. Kode error untuk izin mikrofon yang hilang adalah 268455940, dan kode error untuk izin kamera yang hilang adalah 268455939.

    • Untuk saat ini, semua error lain hanya perlu dicatat tanpa memerlukan tindakan tambahan.

Callback musik latar

  • onOpenFailed: Musik latar gagal dimulai. Periksa apakah file musik dan path-nya yang diteruskan ke antarmuka startBGMWithMusicPathAsync benar. Anda dapat memanggil startBGMWithMusicPathAsync untuk mencoba lagi.

  • onDownloadTimeout: Pemutaran musik latar mengalami timeout. Hal ini sering terjadi saat memutar musik dari URL jaringan. Minta host untuk memeriksa status jaringan saat ini. Anda dapat memanggil startBGMWithMusicPathAsync untuk mencoba lagi.

Callback filter kustom

Gunakan callback AlivcLivePusherCustomFilterDelegate untuk mengintegrasikan dengan SDK retouching pihak ketiga guna mengimplementasikan fitur retouching dasar dan lanjutan. Tujuan utama AlivcLivePusherCustomFilterDelegate adalah menyediakan tekstur internal SDK atau CVPixelBuffer ke SDK retouching untuk diproses, lalu mengembalikan tekstur atau CVPixelBuffer yang telah diproses ke SDK kami untuk menerapkan efek retouching.

Jika sakelar livePushMode di AlivcLivePushConfig diatur ke AlivcLivePushBasicMode, SDK menyediakan ID tekstur melalui callback AlivcLivePusherCustomFilterDelegate, bukan CVPixelBuffer. Callback inti adalah sebagai berikut:

  • onCreate: Callback saat konteks OpenGL dibuat. Ini biasanya digunakan untuk menginisialisasi engine retouching.

  • onProcess: Callback saat tekstur OpenGL diperbarui. Metode ini menyediakan ID tekstur internal asli SDK. Di callback ini, Anda memanggil metode pemrosesan retouching Anda dan mengembalikan ID tekstur yang telah diproses.

  • onDestory: Callback saat konteks OpenGL dihancurkan. Ini biasanya digunakan untuk menghancurkan engine retouching.

API umum

/* Dalam mode kustom, Anda dapat menyesuaikan bitrate minimum dan target secara waktu nyata. */
[self.livePusher setTargetVideoBitrate:800];
[self.livePusher setMinVideoBitrate:200]
/* Dapatkan status pengambilan aliran saat ini. */
BOOL isPushing = [self.livePusher isPushing]; 
/* Dapatkan URL ingest. */
NSString *pushURLString = [self.livePusher getPushURL];
/* Dapatkan informasi debugging performa untuk pengambilan aliran. Untuk parameter dan deskripsi spesifik, rujuk dokumentasi API atau komentar antarmuka. */
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 bernama DebugView. DebugView adalah jendela mengambang global yang dapat dipindahkan dan selalu berada di atas hierarki tampilan. Alat ini mencakup fitur debugging seperti melihat log pengambilan aliran, pemantauan waktu nyata parameter performa, dan grafik garis untuk metrik performa utama.

Catatan

Jangan panggil antarmuka untuk menambahkan DebugView di build rilis Anda.

Contoh kode:

[AlivcLivePusher showDebugView];// Buka alat debugging.

Referensi API

Referensi API untuk Edisi Dasar

FAQ

Pengambilan aliran gagal

Anda dapat menggunakan alat troubleshooting untuk memeriksa apakah URL ingest valid.

Bagaimana cara mendapatkan informasi tentang aliran audio dan video yang diambil?

Buka halaman Manajemen Aliran. Di bagian Aliran Aktif, Anda dapat melihat dan mengelola aliran audio dan video yang Anda ambil.

Bagaimana cara memutar aliran?

Setelah memulai pengambilan aliran, Anda dapat menggunakan pemutar seperti ApsaraVideo Player, FFplay, atau VLC untuk menguji penarikan aliran. Untuk mendapatkan URL pemutaran, lihat Hasilkan URL ingest dan streaming.

Penolakan pengiriman ke App Store

RtsSDK adalah fat binary yang mencakup arsitektur untuk perangkat fisik dan simulator. Untuk mengirim aplikasi Anda ke App Store, Anda harus menghapus arsitektur simulator. Anda dapat menggunakan lipo -remove untuk menghapus slice x86_64 dari binary.