Temukan solusi untuk masalah umum dengan ApsaraVideo Player SDK untuk iOS, termasuk error build Xcode, masalah pemutaran, perilaku pencarian (seek), dan caching.
Masalah terkait lisensi
Atasi masalah lisensi yang tidak valid atau kedaluwarsa di FAQ Lisensi.
Masalah umum lintas platform
-
Untuk masalah yang berlaku lintas platform, periksa FAQ pemutar lintas platform.
-
Developer berpengalaman juga dapat memecahkan masalah error pemutaran secara mandiri.
Masalah pengembangan
Terjadi error saat Anda memaketkan aplikasi dengan Xcode 14 dan mengirimkannya ke App Store untuk ditinjau
Error terkait Bitcode
Gejala: Terjadi error terkait bitcode saat mengirimkan build Xcode 14 ke App Store:
ITMS-90482: Invalid Executable - The executable 'xxx.app/Frameworks/alivcffmpeg.framework/alivcffmpeg' contains bitcode.
Solusi: Jalankan perintah xcrun bitcode_strip untuk menghapus bitcode dari framework. ${framework_path} adalah path binary framework tersebut.
xcrun bitcode_strip ${framework_path} -r -o ${framework_path}
Error terkait cURL
Gejala: Terjadi error terkait cURL saat mengirimkan build Xcode 14 ke App Store:
ITMS-90338: Non-public API usage - The app references non-public symbols in Frameworks/AliyunPlayer.framework/AliyunPlayer: _curl_multi_poll, _curl_multi_wakeup. If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed. For further information, visit the Technical Support Information at http://developer.apple.com/support/technical/
Solusi:
-
Jika proyek Anda hanya mengintegrasikan ApsaraVideo Player SDK (AliPlayerSDK_iOS), upgrade SDK ke versi yang lebih baru dari 5.4.9.2.
-
Jika proyek Anda mengintegrasikan ApsaraVideo Player SDK (AliPlayerPartSDK_iOS) dan SDK video pendek, upgrade ApsaraVideo Player SDK ke versi yang lebih baru dari 5.4.9.2, alivcffmpeg (QuCore-ThirdParty) ke versi 4.3.6, dan SDK video pendek ke versi yang lebih baru dari 3.26.
Error terkait API non-publik
Gejala: Terjadi error terkait API non-publik saat mengirimkan build Xcode 14 ke App Store: Saat mendistribusikan aplikasi dengan Xcode, muncul kotak dialog Distribution completed with warnings, yang menunjukkan App Store Connect Operation Error. Error tersebut menyatakan bahwa aplikasi mereferensikan selector non-publik onCompletion: di AliyunMediaDownloader.framework/AliyunMediaDownloader.
Solusi: Ini adalah peringatan dari build Xcode 14 dan biasanya tidak memengaruhi rilis jika proyek berhasil dibuild. Jika aplikasi tidak dapat dirilis, gunakan Xcode 13.
Error terkait plugin post-processing seperti mpf_filter.framework dan vfi_filter.framework untuk interpolasi frame dan penajaman
Gejala: Terjadi error terkait plugin post-processing (mpf_filter.framework, vfi_filter.framework) untuk interpolasi frame dan penajaman saat mengirimkan build Xcode 14 ke App Store: Saat mendistribusikan aplikasi dengan Xcode, muncul error Distribution failed with errors, yang menunjukkan dua error Asset validation failed: CFBundleIdentifier com.alibaba.AliyunPlayer.mpf_filter dari Payload/xxx.app/Frameworks/mpf_filter.framework dan CFBundleIdentifier com.alibaba.AliyunPlayer.vfi_filter dari vfi_filter.framework mengandung karakter yang tidak valid (garis bawah). CFBundleIdentifiers hanya boleh berisi karakter alfanumerik, titik (.), dan tanda hubung (-).
Solusi:
-
Jika proyek Anda tidak menggunakan plugin yang disebutkan dalam pesan error, Anda dapat menghapus plugin tersebut. Hal ini tidak memengaruhi fitur pemutar dan dapat mengurangi ukuran paket.
-
Jika proyek Anda harus menggunakan plugin yang disebutkan dalam error, Anda dapat sementara menghapus
"_"dari string nilai pada pasangan kunci-nilai"Bundle identifier"di file Info.plist di bawah path framework, lalu kompilasi dan build proyek. -
Anda dapat upgrade ke versi 5.5.2.0 atau lebih baru, di mana penamaan telah diperbaiki.
Apa yang harus saya lakukan jika muncul error "Xcode Error: PhaseScriptExecution failed with a nonzero exit code" saat mengompilasi dan menjalankan demo iOS?
Ikuti langkah-langkah berikut: 1. Buka direktori proyek. 2. Jalankan pod deintegrate.
3. Jalankan pod install.
Setelah saya mengintegrasikan ApsaraVideo Player SDK untuk iOS, apakah saya bisa melakukan debug dan menjalankan aplikasi saya di emulator Xcode?
ApsaraVideo Player SDK untuk iOS tidak mendukung emulator. Gunakan iPhone fisik untuk melakukan debug dan menjalankan aplikasi Anda.
Cara mendapatkan progres pemutaran saat ini
ApsaraVideo Player SDK melaporkan progres pemutaran setiap 500 ms secara default. Perpendek interval untuk pembaruan yang lebih sering:
AVPConfig *config = [self.player getConfig];
config.positionTimerIntervalMs = 100; // Ubah interval callback. Satuan: ms.
[self.player setConfig:config];
/**
@brief: Callback untuk posisi pemutaran saat ini.
@param player: Pointer pemutar.
@param position: Posisi pemutaran saat ini.
*/
- (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
// Progres pemutaran saat ini.
long currentPosition = position;
}
Cara mendapatkan lebar dan tinggi video
Tersedia tiga metode:
-
Metode 1: Setelah pemutar dipersiapkan (AVPEventPrepareDone), baca lebar dan tinggi dari instans AliPlayer.
-(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType { if (eventType == AVPEventPrepareDone) { NSLog(@"Lebar video: %d, tinggi: %d", player.width, player.height); } } -
Metode 2: Dengarkan callback perubahan ukuran video, yang langsung mengembalikan lebar dan tinggi.
- (void)onVideoSizeChanged:(AliPlayer*)player width:(int)width height:(int)height rotation:(int)rotation { NSLog(@"Lebar video: %d, tinggi: %d", width, height); } -
Metode 3: Dengarkan callback informasi track dan baca videoWidth dan videoHeight dari AVPTrackInfo di array info.
CatatanMetode ini bergantung pada permintaan jaringan. Gunakan Metode 1 atau Metode 2 untuk keandalan yang lebih baik.
- (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info { for (int i=0; i<info.count; i++) { AVPTrackInfo *trackInfo = info[i]; NSLog(@"Lebar video: %d, tinggi: %d", trackInfo.videoWidth, trackInfo.videoHeight); } }
Progress bar melompat mundur setelah operasi seek
Penyebab: Pemutar menggunakan seek tidak akurat secara default. Setelah operasi seek, pemutar memulai pemutaran dari keyframe terdekat dengan titik seek.
Solusi: Beralih ke mode seek akurat.
Cara beralih antara mode seek akurat dan tidak akurat
Contoh:
// Beralih ke seek tidak akurat.
[self.player seekToTime:1000 seekMode:AVP_SEEKMODE_INACCURATE];
// Beralih ke seek akurat.
[self.player seekToTime:1000 seekMode:AVP_SEEKMODE_ACCURATE];
Progress bar tetap melompat mundur setelah saya beralih ke mode seek akurat
Penyebab: Seek akurat membutuhkan waktu lebih lama daripada seek tidak akurat. Jika jarak dari titik seek ke keyframe terdekat terlalu besar dan melebihi interval maksimum untuk seek akurat, ApsaraVideo Player SDK secara otomatis beralih ke seek tidak akurat. Hal ini menyebabkan progress bar melompat mundur.
Solusi: Tingkatkan interval maksimum untuk seek akurat guna mengurangi fallback ke seek tidak akurat. Interval yang lebih besar meningkatkan akurasi tetapi dapat memperpanjang waktu seek ketika keyframe berjauhan:
// Satuan: ms.
[self.player setMaxAccurateSeekDelta:10000];
Error selama caching video: encrypt check fail
Caching bekerja sama seperti pengunduhan. Dengan secure download diaktifkan, file verifikasi enkripsi harus sesuai dengan informasi aplikasi. Unduh file tersebut dari Unduhan offline dan tambahkan ke SDK. Ikuti langkah-langkah di Unduhan video, jika tidak, caching atau pengunduhan akan gagal.
Mendapatkan data sumber audio dan video
Kode berikut memberikan contoh cara mendapatkan data sumber audio dan video:
// Atur callback rendering.
self.player.renderingDelegate = self;
// Dengarkan callback rendering.
- (BOOL)onRenderingFrame:(CicadaFrameInfo*) frameInfo {
if (frameInfo.frameType == Cicada_FrameType_Video) { // Data video dasar.
} else if (frameInfo.frameType == Cicada_FrameType_Audio) { // Data audio dasar.
}
return NO;
}
Bagaimana cara mendapatkan piksel setiap frame video di pemutar?
ApsaraVideo Player SDK untuk iOS: Anda dapat mendapatkan piksel dengan mendengarkan callback onRenderingFrame.
player.renderingDelegate = self;
#pragma mark CicadaRenderingDelegate
- (BOOL)onRenderingFrame:(CicadaFrameInfo*) frameInfo{
if(frameInfo.frameType==Cicada_FrameType_Video){
// Video
NSLog(@"menerima frame HW:%p pts:%ld format %d", frameInfo.video_pixelBuffer, frameInfo.pts, CVPixelBufferGetPixelFormatType(frameInfo.video_pixelBuffer));
} else if (frameInfo.frameType==Cicada_FrameType_Audio){
// Audio
}
return NO;
}
Logika switching bitrate adaptif
Setelah mengaktifkan switching bitrate adaptif dengan API [self.player selectTrack:SELECT_AVPTRACK_TYPE_VIDEO_AUTO];, SDK memantau kecepatan jaringan. Jika kecepatan mencapai level bitrate berikutnya dalam 10 detik, pemutar beralih; jika tidak, pemutar tetap pada bitrate saat ini.
-
Dari tinggi ke rendah: pemutar beralih setelah konten bitrate tinggi yang di-cache selesai diputar.
-
Dari rendah ke tinggi: pemutar beralih segera.
Logika retry kustom
SDK secara default mencoba ulang operasi jaringan yang gagal dua kali dengan timeout 15 detik. Jika semua percobaan ulang gagal, callback Error akan dipicu.
Untuk menyesuaikan logika retry, atur jumlah percobaan ulang menjadi 0 dan tangani event retry secara eksternal:
AVPConfig *config = [self.player getConfig];
config.networkRetryCount = 0; // Atur jumlah percobaan ulang. Dalam contoh ini, nilainya diatur menjadi 0.
[self.player setConfig:config];
/**
@brief: Callback untuk event pemutar.
@param player: Pointer pemutar.
@param eventWithString: Jenis event pemutar.
@param description: Deskripsi event pemutar.
@see AVPEventType
*/
-(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description {
if (eventWithString == EVENT_PLAYER_NETWORK_RETRY) { // Error jaringan. Diperlukan percobaan ulang.
// TODO: Tambahkan logika pemrosesan.
}
}
Terjadi error 403 dan pemutaran aliran HLS gagal setelah caching lokal dikonfigurasi
Gejala: Memutar aliran HLS (M3U8) dengan VidAuth dan caching lokal yang diaktifkan gagal dengan error 403.
Penyebab: Jika Anda keluar sebelum video sepenuhnya di-cache, pemutar menggunakan kredensial VidAuth yang kedaluwarsa pada upaya pemutaran berikutnya, menyebabkan error 403.
Solusi: Di SDK V5.5.4.0 dan yang lebih baru, atur field AVPConfig.enableStrictAuthMode untuk mengontrol mode autentikasi untuk aliran HLS dengan parameter autentikasi. Default-nya false.
Autentikasi non-ketat (
false): Informasi autentikasi di-cache bersama konten media. Jika hanya sebagian media yang di-cache sebelumnya, pemutar menggunakan informasi autentikasi yang di-cache untuk meminta bagian yang belum di-cache. Jika autentikasi URL memiliki periode validitas pendek atau jika pemutaran dilanjutkan setelah jeda panjang, autentikasi mungkin kedaluwarsa. Untuk menangani hal ini, Anda perlu mengimplementasikan fitur refresh sumber otomatis.Autentikasi ketat (
true): Informasi autentikasi tidak di-cache. Autentikasi terjadi di awal setiap sesi pemutaran. Hal ini dapat menyebabkan pemutaran gagal jika tidak ada koneksi jaringan.
Pengambilan alihan audio mencegah SDK Pemutar Video Apsara untuk iOS memutar video
Gejala: Saat proyek Anda menggunakan ApsaraVideo Player SDK dan kontrol audio lainnya, terjadi masalah pemutaran seperti tidak ada suara atau video tersendat.
Penyebab: AVAudioSession di iOS adalah singleton. Tanpa konfigurasi terpadu di berbagai kontrol audio, preempt audio dapat mencegah pemutaran video.
Solusi: Anda dapat mengonfigurasi AVAudioSession secara terpadu di lokasi yang tepat dalam proyek Anda. Misalnya, Anda dapat mengonfigurasi sesi audio aplikasi sebagai kategori playback dan mengizinkan mixing dengan aplikasi lain. Anda juga dapat mengonfigurasi sesi audio aplikasi sebagai kategori PlayAndRecord untuk skenario perekaman dan pemutaran. Jika terjadi error selama operasi, pesan error disimpan dalam variabel err.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&err];
Anda juga dapat mengatur proxy kustom AVAudioSession di sisi SDK untuk melewati logika internal AVAudioSession dan mencegah preempt:
-
Atur proxy.
[AliPlayer setAudioSessionDelegate:self]; -
Atur listener untuk proxy.
return TRUEmenunjukkan bahwa SDK tidak lagi mengonfigurasiAVAudioSessionsecara internal.#pragma mark CicadaAudioSessionDelegate - (BOOL)setActive:(BOOL)active error:(NSError **)outError { return YES; } - (BOOL)setCategory:(NSString *)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError **)outError { return YES; } - (BOOL)setCategory:(AVAudioSessionCategory)category mode:(AVAudioSessionMode)mode routeSharingPolicy:(AVAudioSessionRouteSharingPolicy)policy options:(AVAudioSessionCategoryOptions)options error:(NSError **)outError { return YES; }
Terjadi crash stack yang mengarah ke SDK saat ApsaraVideo Player SDK untuk iOS berjalan
Jika terjadi crash stack yang mengarah ke SDK saat Anda menggunakan ApsaraVideo Player SDK untuk iOS, ikuti langkah-langkah berikut:
-
Upgrade ke ApsaraVideo Player SDK untuk iOS versi terbaru, yang mencakup peningkatan stabilitas berkelanjutan. Unduh SDK terbaru dari Pengenalan SDK.
-
Jika crash terus terjadi setelah peningkatan, berikan informasi crash yang lengkap kepada dukungan teknis Alibaba Cloud. Dapatkan dukungan teknis.
Apakah ApsaraVideo Player SDK untuk iOS mendukung pengunduhan saat memutar?
Tidak. SDK mendukung caching lokal, yang mengunduh video selama pemutaran untuk digunakan offline nanti. Namun, SDK tidak mendukung pemutaran file yang di-cache yang disimpan di direktori file terpisah.
Apakah ApsaraVideo Player SDK untuk iOS mendukung mendapatkan progres buffering video?
Ya. ApsaraVideo Player SDK untuk iOS mendukung mendapatkan kecepatan buffering, laju frame rendering real-time, bitrate audio dan video, serta bitrate unduhan jaringan. Dapatkan informasi pemutaran.
Terjadi crash saat pemutar berjalan
Untuk mengidentifikasi penyebabnya:
-
Periksa apakah crash terjadi di ApsaraVideo Player SDK.
Periksa apakah stack crash mengandung awalan
AliyunPlayer. Jika ya, masalah terjadi di ApsaraVideo Player SDK. -
Upgrade ke versi terbaru ApsaraVideo Player SDK dan verifikasi apakah masalah telah terselesaikan.
-
Jika masalah tetap ada, siapkan file crash (semua thread), log crash, dan skenario crash seperti yang dijelaskan di Cara mendapatkan log.
Terjadi crash terkait inisialisasi program atau preload saat ApsaraVideo Player SDK V5.4.6.0 berjalan
Upgrade ApsaraVideo Player SDK ke versi yang lebih baru dari V5.4.7.1. Untuk menjaga stabilitas V5.4.6.0, Anda juga dapat menggunakan versi hotfix pod 5.4.6.0-25587639.
Cara mengaktifkan pemutaran layar penuh
ApsaraVideo Player SDK untuk iOS tidak menyediakan API untuk pemutaran layar penuh. Anda perlu mengimplementasikan fitur ini berdasarkan sistem. Demo ApsaraVideo Player SDK untuk iOS untuk versi 5.5.0.0 dan yang lebih baru telah diadaptasi ke metode layar penuh iOS 16.0 dan yang lebih baru.
Kode berikut memberikan contoh cara mengimplementasikan fitur ini:
Setelah Anda menjalankan metode layar penuh sistem, Anda juga harus menyesuaikan frame playerView yang diatur untuk instans Aliplayer berdasarkan layar.
UIInterfaceOrientation orientation = UIInterfaceOrientationLandscapeLeft; // Putar ke layar penuh
......
// Untuk iOS 16.0 dan yang lebih baru
if (@available(iOS 16.0, *)) {
@try {
NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];
UIWindowScene *ws = (UIWindowScene *)array[0];
Class GeometryPreferences = NSClassFromString(@"UIWindowSceneGeometryPreferencesIOS");
id geometryPreferences = [[GeometryPreferences alloc]init];
UIInterfaceOrientationMask orientationMask = UIInterfaceOrientationMaskLandscapeRight;
if (orientation == UIInterfaceOrientationPortrait) {
orientationMask = UIInterfaceOrientationMaskPortrait;
}
[geometryPreferences setValue:@(orientationMask) forKey:@"interfaceOrientations"];
SEL sel_method = NSSelectorFromString(@"requestGeometryUpdateWithPreferences:errorHandler:");
void (^ErrorBlock)(NSError *err) = ^(NSError *err){
NSLog(@"Error rotasi layar:%@", [err debugDescription]);
};
if ([ws respondsToSelector:sel_method]) {
(((void (*)(id, SEL,id,id))[ws methodForSelector:sel_method])(ws, sel_method,geometryPreferences,ErrorBlock));
}
} @catch (NSException *exception) {
NSLog(@"Error rotasi layar:%@", exception.reason);
} @finally {
}
} else { // Untuk sistem sebelum iOS 16.0
if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
[invocation setArgument:&Orientation atIndex:2];
[invocation invoke];
}
[[UIApplication sharedApplication]setStatusBarOrientation:orientation animated:YES];
}
Muncul bilah hitam selama pemutaran video
Untuk mengidentifikasi penyebabnya:
-
Periksa apakah sumber video itu sendiri memiliki bilah hitam.
-
Anda dapat memanggil API berikut untuk menyesuaikan mode penskalaan pemutar.
/* AVP_SCALINGMODE_SCALEASPECTFILL: Video diskalakan agar mengisi layar. Video mungkin terpotong. AVP_SCALINGMODE_SCALEASPECTFIT: Video diskalakan agar sesuai dengan layar. Bilah hitam mungkin muncul. AVP_SCALINGMODE_SCALETOFILL: Video diskalakan agar mengisi layar tanpa mempertahankan rasio aspek. Video mungkin terdistorsi. */ self.player.scalingMode = AVP_SCALINGMODE_SCALETOFILL; -
Jika mode penskalaan tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikan lebar dan tinggi tampilan kustom untuk
self.player.playerViewdengan memodifikasiframedariself.player.playerView.
Audio diputar tetapi tidak ada video yang ditampilkan, dan log melaporkan "log[AFVTBDecoder] :IOS8VT: throw frame"
Untuk mengidentifikasi penyebabnya:
-
Gunakan pemutar lain untuk memutar video dan periksa apakah file tersebut hanya berisi audio.
-
Jika video diputar normal di pemutar lain dan dimensi video berubah, Anda dapat beralih ke decoding software. Kode berikut menunjukkan cara beralih ke decoding software:
player.enableHardwareDecoder = NO
Tersendat dan desinkronisasi audio-video terjadi selama penarikan aliran RTS di klien iOS
Solusi: Integrasikan komponen ultra-low latency terbaru dari pemutar. Implementasikan penarikan aliran RTS di klien iOS.
Ketika aplikasi iOS berada di latar belakang atau belum dimulai, audio diputar tetapi tidak ada video yang ditampilkan jika pengguna membuka aplikasi melalui notifikasi.
Solusi: Anda dapat menghapus UIApplicationStateActive == [[UIApplication sharedApplication] applicationState].
- (AliPlayer *)aliPlayer{
if (!_aliPlayer && UIApplicationStateActive == [[UIApplication sharedApplication] applicationState]) {
_aliPlayer = [[AliPlayer alloc] init];
_aliPlayer.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT;
_aliPlayer.rate = 1;
_aliPlayer.delegate = self;
_aliPlayer.playerView = self.playerView;
}
return _aliPlayer;
}
Saat memutar aliran langsung, log melaporkan error standar: "-5, IO error (Input/Output (I/O))"
Saat Anda memutar aliran langsung, gunakan nilai default untuk pengaturan cache dan kontrol latensi (startBufferDuration, highBufferDuration, dan maxBufferDuration di AVPConfig). Jangan menyesuaikan pengaturan ini. Verifikasi konfigurasi Anda terhadap Konfigurasi cache dan kontrol latensi.
Setelah saya menjeda pemutaran, berpindah ke halaman lain, lalu kembali untuk melanjutkan pemutaran, error terkait audio dilaporkan di log: "Deactivating an audio session that has running I/O." atau "All I/O should be stopped or paused prior to deactivating the audio session."
Gejala: Di halaman pemutaran video, Anda menjeda pemutaran dan berpindah ke halaman lain yang memiliki audio. Saat Anda kembali, Anda tidak dapat melanjutkan pemutaran, dan error terkait audio seperti "Deactivating an audio session that has running I/O." atau "All I/O should be stopped or paused prior to deactivating the audio session." dilaporkan di log.
Solusi: Periksa adanya konflik dalam pengaturan audio (properti AudioSession). Misalnya, saat Anda keluar dari halaman lain yang memiliki audio, sumber daya audio mungkin tidak dilepas tepat waktu (perekaman atau pemutaran audio terkait tidak dihentikan segera).
Terjadi error saat AliListPlayer digunakan untuk memutar video HLS (m3u8)
Versi SDK Pemutar Video Apsara sebelum V5.4.5.0 tidak mendukung pemutaran video HLS (m3u8) menggunakan pemutar list AliListPlayer. Versi V5.4.5.0 dan yang lebih baru mendukung pemutaran video HLS (m3u8), tetapi Anda harus mengaktifkan caching lokal. Caching lokal.
Tidak dapat memutar video di latar belakang
Gejala: ApsaraVideo Player SDK untuk iOS tidak mendukung pemutaran latar belakang secara default. Demo juga tidak memutar video di latar belakang.
Solusi:
-
Aktifkan fitur pengumpulan data latar belakang di Xcode. Di Xcode, pilih target, buka tab Capabilities, atur toggle Background Modes ke ON, dan di daftar Modes yang diperluas, pilih Audio, AirPlay, and Picture in Picture.
-
Jika Anda mengimplementasikan metode pemantauan foreground/background aplikasi, komentari metode pause dan resume terkait.
// Tambahkan observer untuk mendeteksi saat aplikasi masuk ke latar belakang [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationEnterBackground) name: UIApplicationWillResignActiveNotification object:nil]; // Metode ini dipanggil saat aplikasi masuk ke foreground dari latar belakang [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name: UIApplicationDidBecomeActiveNotification object:nil]; // Metode pause yang perlu dikomentari - (void)applicationEnterBackground { // [self.player pause]; } // Metode restart yang perlu dikomentari - (void)applicationDidBecomeActive { // [self.player start]; }
Error "Redirect to a url" kadang-kadang terjadi selama pemutaran video
Error ini dapat terjadi karena sumber video dibajak. Aktifkan HTTPDNS pada pemutar untuk mengatasinya. Konfigurasikan HTTPDNS untuk klien iOS.
Terjadi error unsupported protocol saat Anda memutar aliran ARTC
Penyebab 1: Lapisan bridge antara pemutar dan komponen RTS (AlivcArtc) serta komponen RTS (RtsSDK) tidak diintegrasikan, meskipun ApsaraVideo Player SDK telah diintegrasikan.
Solusi: Untuk informasi tentang cara mengintegrasikan komponen, lihat Implementasikan penarikan aliran RTS di klien iOS.
Penyebab 2: Versi lapisan bridge antara pemutar dan komponen RTS (AlivcArtc) tidak konsisten dengan versi pemutar.
Solusi: Lapisan bridge (AlivcArtc) dan pemutar harus memiliki nomor versi yang sama. Implementasikan penarikan aliran RTS di klien iOS.
Jika video ditranskode ke beberapa definisi, definisi mana yang diputar oleh ApsaraVideo Player SDK secara default?
SDK memutar definisi pertama yang tersedia dalam urutan ini: FD, LD, SD, HD, 2K, 4K, OD. Definisi.
Cara menentukan definisi default untuk pemutaran video
Contoh:
// Kode berikut memberikan contoh pemutaran menggunakan VidSts.
AVPVidStsSource *stsSource = [[AVPVidStsSource alloc] init];
stsSource.vid = @"<vid>";
stsSource.accessKeyId = @"<accessKeyId>";
stsSource.securityToken = @"<securityToken>";
stsSource.accessKeySecret = @"<accessKeySecret>";
stsSource.quality = @""; // Definisi yang diharapkan untuk pemutaran. Nilai valid: FD, LD, SD, HD, 2K, 4K, dan OD.
stsSource.forceQuality = NO; // Menentukan apakah video diputar secara paksa dalam definisi yang diharapkan. NO: Video tidak diputar secara paksa dalam definisi yang diharapkan. Pemutar mencari definisi dalam urutan default dan memutar video dalam definisi pertama yang ditemukan. YES: Video diputar secara paksa dalam definisi yang diharapkan. Jika definisi yang diharapkan tidak ditemukan, video tidak diputar.
Jika suatu definisi memiliki beberapa stream, stream mana yang diputar oleh ApsaraVideo Player SDK?
Jika suatu definisi memiliki beberapa stream, ApsaraVideo Player SDK memutar stream terbaru.
Cara mengonfigurasi video agar diputar tanpa watermark tetapi diunduh dengan watermark?
Transkode video ke beberapa resolusi. Putar versi tanpa watermark dan unduh versi dengan watermark.
Mode lanskap tidak berlaku
ApsaraVideo Player SDK untuk iOS tidak menyediakan metode untuk mengimplementasikan mode lanskap. Anda perlu mengimplementasikan fitur ini berdasarkan API sistem iOS. Saat mengimplementasikan mode lanskap, pastikan untuk mengatur dengan benar frame dari aliplayer.playerView.
Cara mendapatkan log
Kirimkan log saat meminta dukungan teknis Alibaba Cloud untuk mempercepat penyelesaian masalah.
-
Dapatkan log.
Atur tingkat log ke
LOG_LEVEL_TRACEsebelum mendapatkan log. Dapatkan log SDK. -
Berikan log yang dihasilkan kepada dukungan teknis Alibaba Cloud.