Topik ini menjelaskan antarmuka dan alur kerja dasar SDK Push untuk iOS, serta memberikan 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 pertarungan.
Menggunakan H.264 untuk pengkodean video dan AAC untuk pengkodean audio.
Mendukung konfigurasi kustom untuk fitur seperti kontrol bitrate, resolusi, dan mode tampilan.
Mendukung berbagai operasi Kamera.
Mendukung retouching 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 penangkapan tangkapan video.
Mendukung rekoneksi otomatis dan penanganan kesalahan.
Mendukung algoritma Automatic Gain Control (AGC), Automatic Noise Reduction (ANR), dan Acoustic Echo Cancellation (AEC).
Memungkinkan Anda beralih antara mode pengkodean perangkat lunak dan perangkat keras untuk file video, meningkatkan stabilitas modul pengkodean.
Keterbatasan
Perhatikan batasan berikut sebelum menggunakan Push SDK untuk iOS:
Konfigurasikan orientasi layar sebelum pengambilan aliran. Layar tidak dapat diputar selama siaran langsung.
Nonaktifkan rotasi layar otomatis untuk pengambilan aliran dalam mode lanskap.
Dalam mode penyandian perangkat keras, nilai resolusi keluaran harus merupakan kelipatan dari 16 agar kompatibel dengan penyandi. Sebagai contoh, jika resolusi diatur menjadi 540p, resolusi keluarannya adalah 544 × 960. Sesuaikan ukuran layar pemain berdasarkan resolusi keluaran untuk menghindari munculnya bilah hitam.
Referensi API
Prosedur
Prosedur dasar mencakup langkah-langkah berikut:
Penggunaan fitur
Daftarkan SDK
Untuk informasi lebih lanjut tentang cara mengajukan dan mengonfigurasi lisensi, lihat Integrasi lisensi untuk Push SDK.
Anda harus mendaftarkan SDK sebelum memulai pengambilan aliran. Jika tidak, Anda tidak dapat menggunakan fitur-fitur dari Push SDK.
Panggil antarmuka pendaftaran lisensi pada tahap early sebelum menggunakan Push SDK.
[AlivcLiveBase registerSDK];Kelas AlivcLiveBase memungkinkan Anda menetapkan tingkat log, menetapkan jalur log lokal, dan mengambil versi SDK.
Dalam metode onLicenceCheck dari antarmuka AlivcLiveBase#setObserver, Anda dapat memeriksa secara asinkron apakah lisensi telah dikonfigurasi.
Konfigurasikan parameter pengambilan aliran
Di ViewController tempat Anda memerlukan mesin pengambilan aliran, impor file header #import <AlivcLivePusher/AlivcLivePusher.h>.
Parameter pengambilan aliran dasar memiliki nilai default. Kami menyarankan menggunakan nilai default untuk memungkinkan 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;// Nilai default adalah 540P. Resolusi maksimum yang didukung 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. Interval GOP yang lebih besar menghasilkan latensi yang lebih tinggi. Kami menyarankan Anda mengatur ini ke 1 atau 2.
config.connectRetryInterval = 2000; // Unit: milidetik. Durasi rekoneksi adalah 2s. Atur interval rekoneksi setidaknya 1 detik. Kami menyarankan Anda menggunakan nilai default.
config.previewMirror = false; // Nilai default adalah false. Dalam kondisi normal, pilih false.
config.orientation = AlivcLivePushOrientationPortrait; // Defaultnya adalah mode potret. Anda dapat mengatur tombol home berada di kiri atau kanan untuk mode lanskap.Untuk performa ponsel yang optimal dan memenuhi persyaratan lebar pita jaringan, disarankan untuk mengatur resolusi menjadi 540P. Sebagian besar aplikasi streaming langsung utama menggunakan resolusi ini.
Jika Anda menonaktifkan kontrol bitrate, nilai bitrate akan tetap pada pengaturan awal dan tidak menyesuaikan secara otomatis antara bitrate target dan minimum yang telah ditentukan. Dalam kondisi jaringan yang tidak stabil, hal ini dapat menyebabkan pemutaran tersendat. Gunakan opsi ini dengan hati-hati.
Mengambil aliran kamera
Inisialisasi.
Setelah mengonfigurasi parameter pengambilan aliran, gunakan metode initWithConfig dari Push SDK untuk melakukan inisialisasi. Berikut adalah contoh kode:
self.livePusher = [[AlivcLivePusher alloc] initWithConfig:config];CatatanAlivcLivePusher tidak mendukung beberapa instans. Setiap pemanggilan init harus diikuti oleh pemanggilan destroy yang sesuai.
Daftarkan Callback Pengambilan Aliran.
Callback pengambilan aliran berikut didukung:
Info: callback untuk notifikasi dan deteksi status.
Error: callback yang dikembalikan saat terjadi kesalahan.
Network: callback yang terkait dengan jaringan.
Daftarkan delegasi untuk menerima callback yang sesuai. Berikut adalah contoh kode:
[self.livePusher setInfoDelegate:self]; [self.livePusher setErrorDelegate:self]; [self.livePusher setNetworkDelegate:self];Mulai Pratinjau.
Setelah objek livePusher diinisialisasi, Anda dapat memulai pratinjau. Sertakan tampilan untuk pratinjau kamera, yang merupakan turunan dari UIView. Berikut adalah contoh kode:
[self.livePusher startPreview:self.view];Mulai Pengambilan Aliran.
Pengambilan aliran hanya dapat dimulai setelah pratinjau berhasil. Dengarkan callback onPreviewStarted dari AlivcLivePusherInfoDelegate. Tambahkan kode berikut di dalam callback.
[self.livePusher startPushWithURL:@"Test ingest URL (rtmp://......)"];CatatanURL ingest mendukung protokol RTMP dan Streaming Real-Time (RTS) (artc://). Untuk informasi lebih lanjut tentang cara mendapatkan URL, lihat Hasilkan Ingest dan Streaming URL.
ApsaraVideo Live tidak mendukung pengambilan beberapa aliran ke URL ingest yang sama secara bersamaan. Pengambilan aliran kedua akan ditolak.
Operasi terkait kamera
Operasi terkait kamera hanya dapat dipanggil setelah pratinjau dimulai. Operasi ini mencakup beralih kamera, mengontrol lampu kilat, menyesuaikan fokus, memperbesar atau memperkecil, serta mengatur pencerminan. Operasi ini dapat dilakukan selama pengambilan aliran, atau dalam keadaan dijeda atau tersambung ulang. Memanggil antarmuka ini sebelum pratinjau dimulai tidak akan berpengaruh. Berikut adalah contoh kode:
/* Beralih antara kamera depan dan belakang */
[self.livePusher switchCamera];
/* Nyalakan atau matikan lampu kilat. Menyalakan lampu kilat tidak efektif untuk kamera depan. */
[self.livePusher setFlash:false];
/* Sesuaikan panjang fokus untuk memperbesar gambar yang ditangkap. Nilai parameter positif memperbesar, dan nilai negatif memperkecil. */
CGFloat max = [_livePusher getMaxZoom];
[self.livePusher setZoom:MIN(1.0, max)];
/* Fokus manual. Fokus manual membutuhkan dua parameter: 1. point: titik fokus (koordinat titik untuk difokuskan); 2. autoFocus: apakah akan autofocus. Parameter ini hanya memengaruhi operasi fokus spesifik ini. Perilaku autofocus berikutnya mengikuti pengaturan antarmuka autofocus yang disebutkan di atas. */
[self.livePusher focusCameraAtAdjustedPoint:CGPointMake(50, 50) autoFocus:true];
/* Atur apakah akan autofocus */
[self.livePusher setAutoFocus:false];
/* Pengaturan cermin. Ada dua antarmuka terkait cermin: PushMirror untuk pencerminan ingest dan PreviewMirror untuk pencerminan pratinjau. Pengaturan PushMirror hanya memengaruhi layar pemutaran. Pengaturan PreviewMirror hanya memengaruhi layar pratinjau. Keduanya tidak saling memengaruhi. */
[self.livePusher setPushMirror:false];
[self.livePusher setPreviewMirror:false];Kontrol pengambilan aliran
Kontrol pengambilan aliran mencakup operasi seperti memulai, menghentikan, dan menghapus pengambilan aliran, menghentikan pratinjau, memulai ulang pengambilan aliran, serta menjeda dan melanjutkan pengambilan aliran kamera. Anda dapat menambahkan tombol untuk melakukan operasi ini sesuai kebutuhan bisnis Anda. Berikut adalah contoh kode:
/* Pengguna dapat mengatur pauseImage dan kemudian memanggil antarmuka pause untuk beralih dari pengambilan aliran kamera ke pengambilan aliran gambar statis. Pengambilan aliran audio terus berlanjut. */
[self.livePusher pause];
/* Beralih dari pengambilan aliran gambar statis ke pengambilan aliran kamera. Pengambilan aliran audio terus berlanjut. */
[self.livePusher resume];
/* Anda dapat memanggil stopPush selama pengambilan aliran. Setelah selesai, pengambilan aliran berhenti. */
[self.livePusher stopPush];
/* Anda hanya dapat memanggil stopPreview dalam keadaan pratinjau. Memanggil stopPreview selama pengambilan aliran tidak akan berpengaruh. Setelah pratinjau berhenti, layar pratinjau membeku pada frame terakhir. */
[self.livePusher stopPreview];
/* Anda dapat memanggil restartPush selama pengambilan aliran atau ketika callback Error terkait diterima. Dalam keadaan Error, Anda hanya dapat memanggil antarmuka ini (atau reconnectPushAsync untuk penyambungan ulang) atau memanggil destroy untuk menghapus pengambilan aliran. Setelah selesai, pengambilan aliran dimulai ulang, dan semua sumber daya internal ALivcLivePusher, termasuk pratinjau dan pengambilan, dimulai ulang. */
[self.livePusher restartPush];
/* Anda dapat memanggil antarmuka ini selama pengambilan aliran atau ketika callback Error terkait AlivcLivePusherNetworkDelegate diterima. Dalam keadaan Error, Anda hanya dapat memanggil antarmuka ini (atau restartPush untuk memulai ulang pengambilan aliran) atau memanggil destroy untuk menghapus pengambilan aliran. Setelah selesai, pengambilan aliran tersambung ulang ke server RTMP. */
[self.livePusher reconnectPushAsync];
/* Setelah menghapus pengambilan aliran, pengambilan dan pratinjau berhenti, dan layar pratinjau dihapus. Semua sumber daya terkait AlivcLivePusher dihapus. */
[self.livePusher destory];
self.livePusher = nil;
/* Dapatkan status pengambilan aliran. */
AlivcLivePushStatus status = [self.livePusher getLiveStatus];Mengambil aliran berbagi layar
ReplayKit adalah fitur perekaman layar yang diperkenalkan di iOS 9. Pada iOS 10, kemampuan untuk memanggil ekstensi aplikasi pihak ketiga ditambahkan guna melakukan streaming langsung konten layar. Di iOS 10 dan versi lebih baru, Anda dapat menggunakan Push SDK dengan proses perekaman layar Extension untuk mencapai berbagi layar dalam streaming langsung.
Untuk memastikan operasi sistem yang lancar, iOS mengalokasikan relatif sedikit sumber daya ke proses perekaman layar Extension. Jika proses Extension menggunakan terlalu banyak memori, sistem secara paksa menghentikannya. Untuk mengatasi batasan memori dari proses Extension, Push SDK membagi perekaman layar dan pengambilan menjadi dua komponen: proses perekaman layar Extension (Extension App) dan proses aplikasi utama (Host App). Extension App menangkap konten layar dan mengirimkannya ke Host App melalui komunikasi antar-proses. Host App membuat mesin pengambilan aliran AlivcLivePusher dan mendorong data layar ke server jarak jauh. Karena seluruh proses pengambilan aliran selesai di Host App, Host App juga dapat menangani penangkapan mikrofon dan pengiriman. Extension App hanya bertanggung jawab atas penangkapan konten layar.
Demo Push SDK menggunakan App Group untuk mengaktifkan komunikasi antar-proses antara Extension App dan Host App. Logika ini dienkapsulasi dalam AlivcLibReplayKitExt.framework.
Untuk mengimplementasikan pengambilan aliran layar di iOS, proses perekaman layar Extension dibuat oleh sistem saat perekaman layar diperlukan. Proses ini bertanggung jawab untuk menerima citra layar yang ditangkap oleh sistem. Ikuti langkah-langkah berikut:
-
Buat App Group.
Masuk ke Apple Developer dan lakukan operasi berikut:
-
Di halaman Certificates, IDs & Profiles, daftarkan App Group. Untuk informasi lebih lanjut, lihat Daftarkan App Group.
-
Kembali ke halaman Identifier, pilih App IDs, lalu klik ID Aplikasi Anda untuk mengaktifkan fitur App Group. Anda harus mengonfigurasi App ID untuk aplikasi host dan ekstensi perekaman layar dengan cara yang sama. Untuk informasi lebih lanjut, lihat Aktifkan App Group.
-
Setelah selesai, unduh ulang Provisioning Profile yang sesuai dan konfigurasikan di Xcode.
Setelah Anda menyelesaikan operasi dengan benar, Extension App dapat berkomunikasi dengan Host App.
CatatanSetelah membuat App Group, simpan nilai App Group Identifier untuk digunakan di langkah-langkah berikutnya.
-
-
Buat proses perekaman layar Extension.
Demo Push SDK untuk iOS mencakup ekstensi aplikasi AlivcLiveBroadcast dan AlivcLiveBroadcastSetupUI, yang mendukung berbagi layar untuk streaming langsung. Untuk membuat proses perekaman layar Extension di aplikasi, ikuti langkah-langkah berikut:
-
Di proyek yang ada, pilih , dan pilih Broadcast Upload Extension, seperti yang ditunjukkan pada gambar berikut:

-
Ubah Product Name, pilih Include UI Extension, dan klik Finish untuk membuat ekstensi siaran dan UI, seperti yang ditunjukkan pada gambar berikut:

-
Konfigurasikan Info.plist ekstensi siaran. Di Target yang baru dibuat, Xcode akan membuat file header dan file sumber bernama SampleHandler secara default, seperti yang ditunjukkan pada gambar berikut:

Seret
AlivcLibReplayKitExt.frameworkke dalam proyek sehingga Target Extension bergantung padanya.
Ganti kode di SampleHandler.m dengan kode berikut. Ganti `KAPPGroup` di kode dengan App Group Identifier yang Anda buat di langkah pertama. Berikut adalah 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 disediakan 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 Broadcast Upload Extension Target. Di Extension Target ini, integrasikan
AlivcLibReplayKitExt.frameworkyang disesuaikan untuk modul ekstensi perekaman layar. -
-
Integrasikan Live SDK ke dalam Host App.
Di Host App, 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 Extension App, lalu mulai dan hentikan pengambilan aliran. Untuk detailnya, ikuti langkah-langkah berikut:
-
Di Host App, tambahkan dependensi untuk AlivcLivePusher.framework, AlivcLibRtmp.framework, RtsSDK.framework, dan AlivcLibReplayKitExt.framework.

-
Inisialisasi Push SDK dan konfigurasikan untuk menggunakan sumber video eksternal.
Atur `ExternMainStream` ke `True` dan `ExternVideoFormat` ke `AlivcLivePushVideoFormatYUV420P`. Untuk menggunakan SDK internal untuk penangkapan audio, atur `AudioFromExternal` ke `False`. Konfigurasikan parameter pengambilan aliran lainnya. Berikut adalah contoh kode:
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]; -
Gunakan AlivcLivePusher untuk menyelesaikan fungsi streaming langsung dengan memanggil fungsi-fungsi berikut:
-
Mulai menerima data perekaman layar.
Ganti
kAPPGroupdi kode denganApp Group Identifieryang Anda buat sebelumnya. Berikut adalah contoh kode:[self.livePusher startScreenCapture:kAPPGROUP]; -
Mulai pengambilan aliran.
Berikut adalah contoh kode:
[self.livePusher startPushWithURL:self.pushUrl] -
Hentikan pengambilan aliran.
Berikut adalah contoh kode:
[self.livePusher stopPush]; [self.livePusher destory]; self.livePusher = nil;
-
-
Konfigurasikan 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 dan jendela tidak cocok, pratinjau akan terdistorsi.
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT: Pratinjau mempertahankan rasio aspek video. Jika rasio aspek video dan jendela tidak cocok, akan muncul bilah hitam. Ini adalah mode default.
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: Pratinjau memotong video agar sesuai dengan rasio aspek jendela. Jika rasio aspek video dan jendela tidak cocok, pratinjau akan dipotong.
Berikut adalah contoh kode:
mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);Anda dapat menetapkan ketiga mode di AlivcLivePushConfig. Anda juga dapat menetapkannya secara dinamis selama pratinjau dan pengambilan aliran menggunakan API `setpreviewDisplayMode`.
Pengaturan ini hanya memengaruhi tampilan pratinjau. Resolusi aliran video yang diambil sesuai dengan resolusi yang telah ditetapkan di AlivcLivePushConfig dan tidak berubah saat mode tampilan pratinjau diubah. Mode tampilan pratinjau dirancang untuk menyesuaikan dengan berbagai ukuran ponsel, sehingga Anda dapat bebas memilih efek pratinjau.
Memasukkan citra
Untuk meningkatkan pengalaman pengguna, SDK menyediakan pengaturan untuk pengambilan citra latar belakang dan saat bitrate terlalu rendah. Saat aplikasi berpindah ke latar belakang, secara default SDK akan menangguhkan sementara pengambilan aliran video dan hanya mengambil audio. Pada kondisi ini, Anda dapat menyetel sebuah citra untuk aliran. Sebagai contoh, Anda dapat menampilkan sebuah citra dengan pesan streamer sedang pergi sejenak dan akan segera kembali. Berikut adalah contoh kode:
config.pauseImg = [UIImage imageNamed:@"image.png"];// Setel citra untuk pengambilan aliran latar belakang.Selain itu, ketika jaringan buruk, Anda dapat menyetel sebuah citra statis sesuai kebutuhan. Setelah citra diatur, SDK akan mengambil citra tersebut saat mendeteksi bitrate rendah, membantu mencegah video tersendat. Berikut adalah contoh kode:
config.networkPoorImg = [UIImage imageNamed:@"image.png"];// Setel citra untuk diambil saat jaringan buruk.Push aliran audio dan video eksternal
SDK Push mendukung pengambilan sumber audio dan video eksternal, seperti file audio atau video.
Konfigurasikan input audio dan video eksternal dalam konfigurasi pengambilan aliran.
Masukkan data video eksternal.
Masukkan data audio.
Berikut adalah 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.Berikut adalah contoh kode:
/* Hanya data buffer kontinu dari video eksternal dalam format YUV atau RGB yang dapat dikirim menggunakan metode sendVideoData. Anda dapat menggunakan metode ini untuk mengirim buffer 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 metode sendVideoSampleBuffer.*/
[self.livePusher sendVideoSampleBuffer:sampleBuffer]
/* Anda juga dapat mengonversi format CMSampleBufferRef menjadi buffer kontinu dan kemudian meneruskan buffer tersebut ke metode sendVideoData. Kode berikut memberikan contoh cara melakukan konversi:*/
// Periksa 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;
}
// Konversikan buffer sampel menjadi 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;
}Berikut adalah 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
SDK Push menyediakan fitur untuk menambahkan watermark. Anda dapat menambahkan beberapa watermark, dengan citra watermark dalam format PNG. Berikut adalah contoh kode:
NSString *watermarkBundlePath = [[NSBundle mainBundle] pathForResource:
[NSString stringWithFormat:@"watermark"] ofType:@"png"];// Tetapkan jalur citra watermark.
[config addWatermarkWithPath: watermarkBundlePath
watermarkCoordX:0.1
watermarkCoordY:0.1
watermarkWidth:0.3];// Tambahkan watermark.Parameter `coordX`, `coordY`, dan `width` merupakan nilai relatif. Sebagai contoh, `watermarkCoordX:0.1` berarti koordinat-x dari watermark berada pada 10% dari sumbu-x layar ingest. Jika resolusi ingest adalah 540 × 960, koordinat-x dari watermark adalah 54.
Tinggi citra watermark diskalakan secara proporsional berdasarkan lebar dan tinggi aktual citra watermark serta nilai lebar input.
Untuk mengimplementasikan watermark teks, Anda dapat terlebih dahulu mengonversi teks menjadi citra, lalu menggunakan antarmuka ini untuk menambahkan watermark.
Untuk memastikan kejelasan dan kelancaran tepi watermark, gunakan citra watermark sumber yang memiliki ukuran sama dengan watermark keluaran. Sebagai contoh, jika resolusi video keluaran adalah 544 × 940 dan lebar tampilan watermark adalah 0,1, gunakan citra watermark sumber dengan lebar sekitar 544 × 0,1 = 54,4.
Atur kualitas video
Kualitas video mendukung tiga mode: Prioritas Resolusi, Prioritas Kelancaran, dan Kustom.
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 ResolusiPrioritas Kelancaran
Dalam mode Prioritas Kelancaran, SDK secara internal mengonfigurasi parameter bitrate untuk memprioritaskan kelancaran video yang diambil.
config.qualityMode = AlivcLivePushQualityModeFluencyFirst; // Mode prioritas kelancaranMode Kustom
Dalam mode Kustom, SDK mengonfigurasi bitrate berdasarkan pengaturan Anda. Saat Anda mengatur mode ke Kustom, Anda harus menentukan bitrate awal, bitrate minimum, dan bitrate target.
Bitrate awal: Bitrate saat streaming langsung 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: 1400 kbit/s
config.minVideoBitrate = 600; // Bitrate minimum: 600 kbit/s
config.initialVideoBitrate = 1000; // Bitrate awal: 1000 kbit/sSaat Anda mengatur bitrate kustom, rujuk pengaturan yang direkomendasikan oleh Alibaba Cloud untuk mengonfigurasi bitrate. Untuk pengaturan yang direkomendasikan, lihat tabel berikut:
Tabel 1. Pengaturan yang Direkomendasikan untuk Mode Prioritas Resolusi
Resolusi | initialVideoBitrate | minVideoBitrate | targetVideoBitrate |
360p | 600 | 300 | 1.000 |
480p | 800 | 300 | 1.200 |
540p | 1.000 | 600 | 1.400 |
720p | 1.500 | 600 | 2.000 |
1080p | 1.800 | 1.200 | 2.500 |
Tabel 1. Pengaturan yang Direkomendasikan untuk Mode Prioritas Resolusi
Resolusi | initialVideoBitrate | minVideoBitrate | targetVideoBitrate |
360p | 400 | 200 | 600 |
480p | 600 | 300 | 800 |
540p | 800 | 300 | 1.000 |
720p | 1.000 | 300 | 1.200 |
1080p | 1.500 | 1.200 | 2.200 |
Resolusi adaptif
Setelah mengaktifkan fitur penyesuaian resolusi ingest secara dinamis, resolusi akan otomatis diturunkan saat jaringan buruk untuk meningkatkan kelancaran dan kejelasan video. Berikut adalah contoh kode:
config.enableAutoResolution = YES; // Mengaktifkan resolusi adaptif. Defaultnya adalah NO.Resolusi adaptif hanya berlaku jika mode kualitas video diatur ke Prioritas Resolusi atau Prioritas Kelancaran. Fitur ini tidak efektif dalam mode Kustom.
Beberapa pemutar mungkin tidak mendukung resolusi dinamis. Untuk menggunakan fitur resolusi adaptif, disarankan menggunakan Pemutar Video Apsara.
Musik latar
Push SDK menyediakan fitur seperti pemutaran musik latar, pencampuran, pengurangan kebisingan, pemantauan in-ear, dan pembisuan. Antarmuka terkait musik latar hanya dapat dipanggil setelah pratinjau dimulai. Berikut adalah contoh kode:
/* Mulai memainkan musik latar. */
[self.livePusher startBGMWithMusicPathAsync:musicPath];
/* Hentikan pemutaran musik latar. Jika BGM sedang diputar dan Anda perlu mengganti lagu, cukup panggil antarmuka memulai musik latar. Anda tidak perlu menghentikan musik latar yang sedang diputar. */
[self.livePusher stopBGMAsync];
/* Jeda pemutaran musik latar. Antarmuka ini hanya dapat dipanggil setelah pemutaran musik latar dimulai. */
[self.livePusher pauseBGM];
/* Lanjutkan pemutaran musik latar. Antarmuka ini hanya dapat dipanggil ketika musik latar dijeda. */
[self.livePusher resumeBGM];
/* Aktifkan putar ulang berulang untuk musik. */
[self.livePusher setBGMLoop:true];
/* Atur sakelar pengurangan kebisingan. Setelah mengaktifkan pengurangan kebisingan, bagian suara non-manusia dari suara yang ditangkap akan disaring. Ini mungkin sedikit menekan suara manusia. Kami menyarankan agar pengguna diberi pilihan apakah akan mengaktifkan fitur pengurangan kebisingan. Secara default, fitur ini tidak digunakan. */
[self.livePusher setAudioDenoise:true];
/* Atur sakelar pemantauan in-ear. Fitur pemantauan in-ear terutama digunakan dalam skenario KTV. Setelah mengaktifkan pemantauan in-ear, suara streamer akan terdengar di headphone saat mereka dicolokkan. Saat dimatikan, suara manusia tidak akan terdengar di headphone. Pemantauan in-ear tidak berfungsi tanpa headphone. */
[self.livePusher setBGMEarsBack:true];
/* Pengaturan pencampuran, menyediakan penyesuaian volume untuk musik latar dan suara manusia yang ditangkap. */
[self.livePusher setBGMVolume:50];// Atur volume musik latar.
[self.livePusher setCaptureVolume:50];// Atur volume penangkapan suara manusia.
/* Atur mode bisu. Saat dibisukan, baik input musik maupun suara manusia akan dibungkam. Untuk membisukan musik atau suara manusia secara terpisah, Anda dapat menggunakan antarmuka pengaturan volume pencampuran. */
[self.livePusher setMute:isMute?true:false];Capture snapshots
Push SDK menyediakan fitur untuk menangkap snapshot dari aliran video lokal. Berikut adalah contoh kode:
/* Set callback snapshot. */
[self.livePushersetSnapshotDelegate:self];
/* Panggil API snapshot. */
[self.livePushersnapshot:1interval:1];Konfigurasikan fitur retouching
Alibaba Cloud Push SDK menyediakan dua mode retouching: Dasar dan Lanjutan. Mode Dasar mendukung pemutihan, penghalusan kulit, dan penambahan rona merah muda. Mode Lanjutan mencakup fitur pemutihan berbasis wajah, penghalusan kulit, rona merah muda, pembesaran mata, penyempitan wajah, serta pelangsingan wajah. Fitur ini didukung oleh Queen SDK. Berikut adalah contoh kode:
#pragma mark - "Jenis dan parameter retouching API"/**
* @brief Mengaktifkan atau menonaktifkan jenis retouching.
* @param type Nilai dari QueenBeautyType.
* @param isOpen YES: Aktif, NO: Nonaktif.
*
*/
- (void)setQueenBeautyType:(kQueenBeautyType)type enable:(BOOL)isOpen;
/**
* @brief Atur parameter retouching.
* @param param Jenis parameter retouching, salah satu dari QueenBeautyParams.
* @param value Nilai yang akan diatur. Rentangnya adalah [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 terkait filter"
/**
* @brief Atur gambar filter. Sebelum mengatur gambar filter, Anda perlu mengaktifkan kQueenBeautyTypeLUT.
* @param imagePath Jalur gambar filter yang akan diatur.
*/
- (void)setLutImagePath:(NSString *)imagePath;
#pragma mark - "API terkait pembentukan wajah"
/**
*@brief Atur jenis pembentukan wajah. Sebelum mengatur, Anda perlu mengaktifkan kQueenBeautyTypeFaceShape.
*@param faceShapeType Jenis pembentukan wajah yang akan diatur, lihat QueenBeautyFaceShapeType.
*@param value Nilai yang akan diatur.
*/
- (void)setFaceShape:(kQueenBeautyFaceShapeType)faceShapeType
value:(float)value;
#pragma mark - "API terkait makeup"
/**
* @brief Atur jenis makeup dan jalur ke materi gambar. Untuk mengatur makeup, Anda perlu mengaktifkan kQueenBeautyTypeMakeup.
* @param makeupType Jenis makeup.
* @param imagePaths Koleksi jalur ke materi makeup.
* @param blend Jenis pencampuran.
*/
- (void)setMakeupWithType:(kQueenBeautyMakeupType)makeupType
paths:(NSArray<NSString *> *)imagePaths
blendType:(kQueenBeautyBlend)blend;
/**
* @brief Atur jenis makeup dan jalur ke materi gambar.
* @param makeupType Jenis makeup.
* @param imagePaths Koleksi jalur ke materi makeup.
* @param blend Jenis pencampuran.
* @param fps Laju frame yang sesuai.
*/
- (void)setMakeupWithType:(kQueenBeautyMakeupType)makeupType
paths:(NSArray<NSString *> *)imagePaths
blendType:(kQueenBeautyBlend)blend fps:(int)fps;
/**
* @brief Atur transparansi jenis makeup. Anda dapat menentukan gender.
* @param makeupType Jenis makeup.
* @param isFeMale Apakah gender adalah perempuan. YES: perempuan, NO: laki-laki.
* @param alpha Transparansi makeup.
*/
- (void)setMakeupAlphaWithType:(kQueenBeautyMakeupType)makeupType
female:(BOOL)isFeMale alpha:(float)alpha;
/**
* @brief Atur jenis pencampuran untuk jenis makeup.
* @param makeupType Jenis makeup.
* @param blend Jenis pencampuran.
*/
- (void)setMakeupBlendWithType:(kQueenBeautyMakeupType)makeupType
blendType:(kQueenBeautyBlend)blend;
/**
* @brief Hapus semua makeup.
*/
- (void)resetAllMakeupType;Atur parameter retouching secara real-time
Push SDK mendukung penyesuaian parameter retouching secara real-time selama pengambilan aliran. Anda dapat mengaktifkan sakelar retouching dan menyesuaikan nilai parameternya sesuai kebutuhan. Berikut adalah 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 fitur kuis langsung
Fitur kuis langsung dapat diimplementasikan dengan menyisipkan pesan SEI ke dalam aliran langsung, yang kemudian diurai oleh pemutar. Push SDK menyediakan antarmuka untuk menyisipkan SEI, dan antarmuka ini hanya dapat dipanggil selama pengambilan aliran. Berikut adalah contoh kode:
/*
msg: Badan pesan SEI yang akan disisipkan ke dalam aliran. Format JSON direkomendasikan. ApsaraVideo Player SDK dapat menerima pesan SEI ini, mengurai, dan menampilkannya.
repeatCount: Jumlah frame untuk dikirim. Untuk memastikan bahwa SEI tidak hilang, Anda perlu menetapkan jumlah pengulangan. Sebagai contoh, jika diatur ke 100, pesan SEI ini akan disisipkan ke dalam 100 frame berikutnya. Pemutar akan menghapus pesan SEI duplikat.
delayTime: Waktu tunda dalam milidetik sebelum pengiriman.
KeyFrameOnly: Apakah hanya mengirim pada keyframe saja.
*/
[self.livePusher sendMessage:@"Informasi pertanyaan" repeatCount:100 delayTime:0 KeyFrameOnly:false];Adaptasi iPhone X
Dalam skenario umum, mengatur bingkai tampilan pratinjau ke mode layar penuh memungkinkan pratinjau berfungsi secara normal. Namun, karena rasio layar unik pada iPhone X, pengaturan tampilan pratinjau ke ukuran layar penuh dapat menyebabkan peregangan gambar. Oleh karena itu, disarankan untuk tidak menggunakan mode layar penuh saat melakukan pratinjau di iPhone X.
Ubah ukuran tampilan selama pengambilan aliran
Anda dapat melakukan iterasi melalui UIView yang ditetapkan saat memanggil antarmuka `startPreview` atau `startPreviewAsync` dan mengubah bingkai semua subview dari tampilan pratinjau. Contohnya adalah sebagai berikut:
[self.livePusher startPreviewAsync:self.previewView];
for (UIView *subView in [self.previewView subviews]) {
// ...
}Memainkan efek suara eksternal
Untuk memainkan efek suara atau musik pada halaman pengambilan aliran, disarankan menggunakan AVAudioPlayer karena SDK saat ini mengalami konflik dengan AudioServicesPlaySystemSound. Setelah pemutaran selesai, Anda perlu memperbarui konfigurasi AVAudioSession dan AVAudioPlayer. Berikut adalah contoh kode untuk memainkan efek suara:
- (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 proses terkait latar belakang secara internal, sehingga Anda tidak perlu melakukan tindakan tambahan. Saat aplikasi berada di latar belakang, SDK secara default tetap mengambil audio, sementara video dipertahankan pada frame terakhir. Pastikan untuk mengaktifkan opsi Audio, AirPlay, and Picture in Picture di bagian Kemampuan Aplikasi Anda. Hal ini memastikan bahwa aplikasi dapat menangkap audio dengan normal saat berada di latar belakang. Lihat gambar berikut:
Jika pengambilan aliran audio tidak diperlukan saat aplikasi berada di latar belakang, Anda dapat menghentikan pengambilan aliran ketika aplikasi memasuki latar belakang dan melanjutkannya saat aplikasi kembali ke latar depan. Untuk melakukannya, hapus mesin pengambilan aliran saat aplikasi masuk ke latar belakang dan buat ulang saat aplikasi kembali ke latar depan.
Dalam pendekatan ini, pastikan untuk mendengarkan notifikasi `UIApplicationWillResignActiveNotification` dan `UIApplicationDidBecomeActiveNotification` saat aplikasi memasuki latar belakang. Metode lainnya dapat menimbulkan risiko.
Mendengarkan panggilan balik
Push SDK mencakup callback berikut:
Jenis callback | Nama kelas callback |
AlivcLivePusherInfoDelegate | |
AlivcLivePusherNetworkDelegate | |
AlivcLivePusherErrorDelegate | |
AlivcLivePusherBGMDelegate | |
AlivcLivePusherCustomFilterDelegate |
Callback pengambilan aliran
Callback pengambilan aliran digunakan untuk memberi tahu aplikasi tentang status SDK, termasuk memulai pratinjau, merender frame video pertama, mengirim frame audio/video pertama, memulai pengambilan aliran, dan menghentikan pengambilan aliran.
onPushStarted: Menunjukkan koneksi ke server berhasil.
onFirstFramePushed: Menunjukkan bahwa frame audio/video pertama telah dikirim dengan sukses.
onPushStarted, onFirstFramePushed: Menunjukkan bahwa pengambilan aliran SDK berhasil.
Callback terkait jaringan
Callback terkait jaringan memberi tahu aplikasi tentang status jaringan dan koneksi SDK. Untuk fluktuasi jaringan singkat atau pergantian dalam batas waktu rekoneksi dan jumlah percobaan yang ditetapkan di AlivcLivePushConfig, SDK secara otomatis melakukan rekoneksi. Setelah rekoneksi berhasil, pengambilan aliran dilanjutkan.
onConnectFail: Menunjukkan bahwa pengambilan aliran gagal. Periksa apakah URL ingest tidak valid, mengandung karakter tidak valid, memiliki masalah autentikasi, melebihi batas maksimum stream ingest bersamaan, atau ada dalam blacklist. Pastikan URL ingest valid dan tersedia sebelum mencoba ingest lagi. Kode kesalahan spesifik meliputi 0x30020901 hingga 0x30020905, dan 0x30010900 hingga 0x30010901.
onConnectionLost: Ini adalah callback kehilangan koneksi. Setelah koneksi hilang, SDK secara internal melakukan rekoneksi dan memicu `onReconnectStart`. Jika koneksi stream ingest tidak dipulihkan setelah jumlah maksimum percobaan rekoneksi (`config.connectRetryCount`), `onReconnectError` akan dipicu.
onNetworkPoor: Ini adalah callback jaringan lambat. Menerima callback ini menunjukkan bahwa jaringan saat ini tidak cukup mendukung stream ingest. Pada titik ini, stream ingest masih berlangsung dan belum terganggu. Anda dapat menangani logika bisnis Anda di sini, seperti menampilkan notifikasi UI kepada pengguna.
onNetworkRecovery: Ini adalah callback pemulihan jaringan.
onReconnectError: Ini adalah callback kegagalan rekoneksi. Ini menunjukkan bahwa rekoneksi gagal. Periksa jaringan saat ini dan mulai ulang stream ingest ketika jaringan pulih.
onSendDataTimeout: Ini adalah callback timeout pengiriman data. Periksa jaringan saat ini. Hentikan dan mulai ulang stream ingest setelah jaringan pulih.
onPushURLAuthenticationOverdue: Ini adalah callback autentikasi kedaluwarsa. Callback ini menunjukkan bahwa autentikasi untuk URL ingest saat ini telah kedaluwarsa. Anda harus memberikan URL baru ke SDK.
Callback kesalahan
onSystemError: Ini adalah callback pengecualian perangkat sistem. Anda harus menghapus mesin dan mencoba lagi.
onSDKError: Ini adalah callback kesalahan SDK. Anda harus menanganinya secara berbeda berdasarkan kode kesalahan:
Jika kode kesalahan adalah 805438211, itu menunjukkan performa perangkat buruk dengan laju encoding dan rendering rendah. Anda harus memberi tahu streamer dan menghentikan logika bisnis yang memakan waktu di lapisan aplikasi, seperti retouching tingkat lanjut dan animasi.
Anda harus menangani callback secara khusus ketika aplikasi kekurangan izin mikrofon atau kamera. Kode kesalahan untuk tidak adanya izin mikrofon adalah 268455940, dan kode kesalahan untuk tidak adanya izin kamera adalah 268455939.
Untuk kesalahan lainnya, Anda dapat mencatatnya tanpa mengambil tindakan lain.
Callback musik latar
onOpenFailed: Callback ini menunjukkan bahwa musik latar gagal dimulai. Periksa apakah jalur musik yang diteruskan ke antarmuka memulai musik latar dan file musik benar. Anda dapat memanggil
startBGMWithMusicPathAsyncuntuk memainkannya kembali.onDownloadTimeout: Callback ini menunjukkan bahwa pemutaran musik latar habis waktu. Hal ini sering terjadi ketika Anda memutar musik latar dari URL jaringan. Beri tahu streamer untuk memeriksa status jaringan saat ini. Anda dapat memanggil
startBGMWithMusicPathAsyncuntuk memainkannya kembali.
Callback untuk retouching eksternal dan pemrosesan filter
Anda dapat menggunakan callback `AlivcLivePusherCustomFilterDelegate` untuk berintegrasi dengan SDK retouching pihak ketiga guna mengimplementasikan fitur retouching dasar dan lanjutan. Tujuan utama `AlivcLivePusherCustomFilterDelegate` adalah mengirim tekstur internal SDK atau `CVPixelBuffer` ke SDK retouching untuk diproses, kemudian mengembalikan tekstur atau `CVPixelBuffer` yang telah diproses ke SDK untuk menerapkan efek retouching.
Atur sakelar `livePushMode` di `AlivcLivePushConfig` ke `AlivcLivePushBasicMode`. SDK menggunakan `AlivcLivePusherCustomFilterDelegate` untuk mengembalikan ID tekstur, bukan `CVPixelBuffer`. Callback inti adalah sebagai berikut:
onCreate: Konteks OpenGL dibuat. Callback ini biasanya digunakan untuk menginisialisasi mesin retouching.
onProcess: Tekstur OpenGL diperbarui. Metode ini mengembalikan ID tekstur asli dari dalam SDK. Dalam callback ini, panggil metode pemrosesan retouching dan kembalikan ID tekstur yang telah diproses.
onDestroy: Konteks OpenGL dihancurkan. Callback ini biasanya digunakan untuk menghancurkan mesin retouching.
Metode dan antarmuka umum
/* Dalam mode Kustom, pengguna dapat menyesuaikan bitrate minimum dan target secara real time. */
[self.livePusher setTargetVideoBitrate:800];
[self.livePusher setMinVideoBitrate:200]
/* Dapatkan status apakah pengambilan aliran sedang berlangsung. */
BOOL isPushing = [self.livePusher isPushing];
/* Dapatkan URL ingest. */
NSString *pushURLString = [self.livePusher getPushURL];
/* Dapatkan informasi debugging kinerja pengambilan aliran. Untuk parameter spesifik dan deskripsi kinerja pengambilan aliran, lihat dokumentasi API atau komentar antarmuka. */
AlivcLivePushStatsInfo *info = [self.livePusher getLivePushStatusInfo];
/* Dapatkan nomor versi. */
NSString *sdkVersion = [self.livePusher getSDKVersion];
/* Atur tingkat log untuk memfilter informasi debugging yang diinginkan 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 tampilan setelah ditambahkan. Alat ini mencakup fitur debug seperti melihat log pengambilan aliran, deteksi real-time parameter kinerja pengambilan aliran, serta grafik garis metrik kinerja utama.
Jangan memanggil antarmuka untuk menambahkan DebugView di versi rilis Anda.
Berikut adalah contoh kode:
[AlivcLivePusher showDebugView];// Buka alat debugging.Referensi API
FAQ
Stream ingest fails
Gunakan alat pemecahan masalah untuk memeriksa validitas URL ingest.
How do I obtain information about ingested audio and video streams?
Buka Manajemen Stream, lalu lihat dan kelola aliran audio serta video yang diingest di tab Active Streams.
How do I play a stream?
Setelah memulai stream ingest, Anda dapat menggunakan pemain seperti ApsaraVideo Player, FFplay, atau VLC untuk menguji penarikan aliran. Untuk detail lebih lanjut tentang cara mendapatkan URL streaming, lihat Hasilkan URL ingest dan streaming.
App Store submission fails
RtsSDK menyediakan pustaka untuk semua platform. Untuk pengiriman ke App Store, Anda harus menghapus arsitektur emulator. Gunakan perintah lipo -remove untuk menghapus arsitektur x86_64.