Topik ini menjelaskan masalah umum dan solusinya saat menggunakan ApsaraVideo Player SDK untuk iOS.
Masalah lisensi
Untuk masalah seperti lisensi tidak valid atau kedaluwarsa, lihat FAQ Lisensi.
Masalah umum pada pemutar di berbagai klien
Untuk masalah yang mungkin terjadi di klien mana pun, lihat FAQ pemutar umum.
Jika Anda memiliki pengalaman pengembangan, Anda juga dapat mendiagnosis sendiri pengecualian pemutaran.
Masalah pengembangan
Terjadi error saat memaketkan aplikasi dengan Xcode 14 dan mengirimkannya ke App Store untuk ditinjau
Error terkait Bitcode
Gejala: Saat memaketkan aplikasi dengan Xcode 14 dan mengirimkannya ke App Store untuk ditinjau, terjadi error terkait bitcode. Kode berikut menunjukkan contoh pesan error:
ITMS-90482: Invalid Executable - The executable 'xxx.app/Frameworks/alivcffmpeg.framework/alivcffmpeg' contains bitcode.Solusi: Anda dapat menjalankan perintah xcrun bitcode_strip untuk menghapus bitcode dari framework secara manual. Pada contoh berikut, ${framework_path} adalah path file biner framework tersebut.
xcrun bitcode_strip ${framework_path} -r -o ${framework_path}Error terkait cURL
Gejala: Saat memaketkan aplikasi dengan Xcode 14 dan mengirimkannya ke App Store untuk ditinjau, terjadi error terkait cURL. Kode berikut menunjukkan contoh pesan error:
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 di atas 5.4.9.2.
Jika proyek Anda mengintegrasikan ApsaraVideo Player SDK (AliPlayerPartSDK_iOS) dan short video SDK, upgrade ApsaraVideo Player SDK ke versi di atas 5.4.9.2, alivcffmpeg (QuCore-ThirdParty) ke versi 4.3.6, dan short video SDK ke versi di atas 3.26.
Error terkait API non-publik
Gejala: Saat memaketkan aplikasi dengan Xcode 14 dan mengirimkannya ke App Store untuk ditinjau, terjadi error terkait API non-publik. Gambar berikut menunjukkan contoh pesan error:
Solusi: Error tersebut merupakan peringatan dari build Xcode 14. Dalam kebanyakan kasus, jika proyek dapat dibangun, peringatan ini tidak memengaruhi rilis. Jika Anda tidak dapat merilis aplikasi, gunakan Xcode 13 untuk rilis.
Error terkait plugin post-processing seperti mpf_filter.framework dan vfi_filter.framework untuk interpolasi frame dan sharpening
Gejala: Saat memaketkan aplikasi dengan Xcode 14 dan mengirimkannya ke App Store untuk ditinjau, terjadi error terkait plugin post-processing seperti mpf_filter.framework dan vfi_filter.framework untuk interpolasi frame dan sharpening. Gambar berikut menunjukkan contoh pesan error:
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 bangun proyek.Anda dapat melakukan upgrade ke versi 5.5.2.0 atau lebih baru, di mana penamaan telah diperbaiki.
Apa yang harus saya lakukan jika terjadi 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 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 debugging di emulator. Anda harus menggunakan iPhone fisik untuk melakukan debug dan menjalankan aplikasi Anda.
Cara mendapatkan progres pemutaran saat ini
Secara default, ApsaraVideo Player SDK memanggil balik progres pemutaran setiap 500 ms. Anda dapat mengubah interval callback tersebut. Perpendek intervalnya untuk mendapatkan progres pemutaran saat ini lebih sering. Kode berikut memberikan contohnya:
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
Anda dapat menggunakan salah satu dari tiga metode berikut:
Metode 1: Setelah metode prepare dipanggil untuk instans AliPlayer untuk iOS dan pemutar siap (AVPEventPrepareDone), Anda dapat langsung mendapatkan lebar dan tinggi 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 yang dikembalikan saat ukuran video berubah. Callback ini langsung mengembalikan lebar dan tinggi video.
- (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 yang dikembalikan saat informasi track diperoleh. Dapatkan videoWidth dan videoHeight dari AVPTrackInfo yang dikembalikan dalam array info.
CatatanMendengarkan callback informasi track melibatkan permintaan jaringan. Keberhasilan mendapatkan lebar dan tinggi video bergantung pada kualitas jaringan. Gunakan Metode 1 atau Metode 2 untuk mendapatkan lebar dan tinggi video agar lebih andal.
- (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 mulai memutar dari keyframe terdekat dengan titik seek.
Solusi: Beralihlah ke mode seek akurat.
Cara beralih antara mode seek akurat dan tidak akurat
Kode berikut memberikan contoh cara mengganti mode seek:
// 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: Anda dapat memanggil API untuk mengatur interval maksimum yang lebih besar untuk seek akurat. Hal ini mengurangi frekuensi pemutar beralih dari seek akurat ke seek tidak akurat dan meningkatkan akurasi seek. Namun, jika jarak dari titik seek ke keyframe terdekat terlalu besar, operasi seek membutuhkan waktu lebih lama. Atur interval maksimum untuk seek akurat sesuai kebutuhan. Kode berikut memberikan contohnya:
// Satuan: ms.
[self.player setMaxAccurateSeekDelta:10000];Error selama caching video: encrypt check fail
Caching sama dengan mengunduh. Jika secure download diaktifkan, pastikan bahwa file verifikasi enkripsi cocok dengan informasi aplikasi. Anda harus mengunduh file verifikasi enkripsi yang dihasilkan di Unduhan offline dan menyimpannya ke ApsaraVideo Player SDK. Untuk informasi lebih lanjut, lihat 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 Anda mengaktifkan switching bitrate adaptif dengan memanggil API [self.player selectTrack:SELECT_AVPTRACK_TYPE_VIDEO_AUTO];, ApsaraVideo Player SDK mengumpulkan statistik kecepatan jaringan saat ini. Jika kecepatan jaringan mencapai level bitrate berikutnya dalam 10 detik, pemutar beralih ke bitrate tersebut. Jika kecepatan jaringan tidak mencapai level bitrate berikutnya dalam 10 detik, pemutar tidak beralih.
Saat beralih dari bitrate tinggi ke bitrate rendah, jika kecepatan jaringan mencapai level bitrate berikutnya dalam 10 detik, pemutar beralih setelah konten yang dicache pada bitrate tinggi selesai diputar.
Saat beralih dari bitrate rendah ke bitrate tinggi, jika kecepatan jaringan mencapai level bitrate berikutnya dalam 10 detik, pemutar beralih segera.
Logika retry kustom
Untuk retry jaringan, ApsaraVideo Player SDK secara default mencoba ulang operasi yang gagal sebanyak dua kali. Periode timeout jaringan adalah 15 detik. Jika percobaan ulang gagal, callback Error dipicu.
Anda dapat menyesuaikan logika retry. Saat retry dipicu, event retry dikirim ke modul eksternal, yang menentukan logika retry spesifik. Kode berikut memberikan contohnya:
AVPConfig *config = [self.player getConfig];
config.networkRetryCount = 0; // Atur jumlah retry. Pada contoh ini, nilainya diatur ke 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 retry.
// TODO: Tambahkan logika pemrosesan.
}
}Terjadi error 403 dan pemutaran stream HLS gagal setelah caching lokal dikonfigurasi
Gejala: Saat memutar stream video HLS (M3U8) menggunakan VidAuth dan mengaktifkan caching lokal, pemutaran gagal dan terjadi error 403.
Penyebab: Setelah caching lokal diaktifkan, jika Anda keluar dari pemutaran sebelum video sepenuhnya dicache, pemutar menggunakan informasi VidAuth yang kedaluwarsa dari sesi sebelumnya untuk meminta bagian video yang belum dicache saat Anda memulai pemutaran lagi. Hal ini menyebabkan autentikasi gagal dengan error 403.
Solusi: Untuk ApsaraVideo Player SDK V5.5.4.0 dan versi lebih baru, jika URL pemutaran video berisi parameter autentikasi dan protokol pemutaran adalah HLS, Anda dapat mengatur field AVPConfig.enableStrictAuthMode untuk memilih mode autentikasi. Nilai default adalah false.
Penandatanganan non-ketat (`false`): Penandatanganan juga dicache. Jika hanya sebagian media yang dicache terakhir kali, pemutar menggunakan penandatanganan yang dicache untuk menginisiasi permintaan saat memutar bagian yang tidak dicache berikutnya. Jika periode validitas penandatanganan URL sangat singkat, hal ini menyebabkan pengecualian pemutaran.
Penandatanganan ketat (`true`): Penandatanganan tidak dicache. Penandatanganan dilakukan setiap kali pemutaran dimulai. Hal ini menyebabkan pemutaran gagal tanpa koneksi jaringan.
Preempt audio mencegah ApsaraVideo Player SDK untuk iOS memutar video
Gejala: Proyek berbasis kode Anda menggunakan ApsaraVideo Player SDK untuk iOS dan kontrol pemutaran audio lainnya. Saat Anda menggunakan ApsaraVideo Player SDK untuk iOS untuk memutar video, terjadi masalah seperti tidak ada suara atau video tersendat, dan video tidak dapat diputar.
Penyebab: Kontrol audio AVAudioSession di iOS bersifat singleton. Jika beberapa kontrol pemutaran audio tidak dikonfigurasi secara terpadu, preempt audio dapat terjadi. Hal ini mencegah ApsaraVideo Player SDK untuk iOS memutar 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 pencampuran 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];Pada saat yang sama, di sisi ApsaraVideo Player SDK untuk iOS, Anda dapat menyesuaikan proxy untuk AVAudioSession dan tidak menggunakan logika AVAudioSession yang didefinisikan di dalam SDK. Hal ini membantu menghindari risiko preempt audio yang mungkin disebabkan oleh ApsaraVideo Player SDK untuk iOS. Kode berikut menunjukkan contoh konfigurasi di sisi ApsaraVideo Player SDK untuk iOS:
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 sedang berjalan
Jika terjadi crash stack yang mengarah ke SDK saat Anda menggunakan ApsaraVideo Player SDK untuk iOS, Anda dapat menggunakan metode berikut untuk menyelesaikan masalah tersebut:
Jika Anda tidak menggunakan versi terbaru ApsaraVideo Player SDK untuk iOS, upgrade ke versi terbaru. ApsaraVideo Player SDK untuk iOS terus diperbarui untuk meningkatkan stabilitas. Untuk informasi lebih lanjut tentang cara mendapatkan SDK terbaru, lihat Pengenalan SDK.
Jika crash tetap terjadi setelah Anda melakukan upgrade ke versi terbaru, berikan informasi crash lengkap kepada dukungan teknis Alibaba Cloud. Untuk informasi lebih lanjut tentang cara mendapatkan dukungan teknis, lihat Dapatkan dukungan teknis.
Apakah ApsaraVideo Player SDK untuk iOS mendukung pengunduhan saat memutar?
Tidak. ApsaraVideo Player SDK untuk iOS memungkinkan Anda mengaktifkan fitur caching lokal untuk mencache dan mengunduh file video selama pemutaran. Saat Anda memutar video berikutnya, file yang dicache diputar langsung. SDK tidak mendukung pemutaran file video yang dicache secara lokal yang disimpan di direktori file.
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 video. Untuk informasi lebih lanjut, lihat Dapatkan informasi pemutaran.
Terjadi crash saat pemutar sedang berjalan
Anda dapat mengikuti langkah-langkah berikut untuk mengidentifikasi penyebab masalah:
Periksa apakah crash terjadi di ApsaraVideo Player SDK.
Periksa apakah stack crash berisi 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 terkait (termasuk semua thread), log crash, dan skenario crash. Untuk informasi lebih lanjut, lihat Cara mendapatkan log.
Terjadi crash terkait inisialisasi program atau preload saat ApsaraVideo Player SDK V5.4.6.0 sedang berjalan
Upgrade ApsaraVideo Player SDK ke versi di atas 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 lebih baru telah diadaptasi ke metode layar penuh iOS 16.0 dan lebih baru.
Kode berikut memberikan contoh cara mengimplementasikan fitur ini:
Setelah 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 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
Anda dapat mengikuti langkah-langkah berikut untuk mengidentifikasi penyebab masalah:
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 sesuai 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"
Anda dapat mengikuti langkah-langkah berikut untuk mengidentifikasi penyebab masalah:
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 versi terbaru komponen ultra-low latency pemutar untuk menyelesaikan masalah ini. Untuk informasi lebih lanjut, lihat Implementasikan penarikan aliran RTS di klien iOS.
Saat 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 stream live, log melaporkan error standar: "-5, IO error (Input/Output (I/O))"
Saat memutar stream live, gunakan nilai default untuk pengaturan cache dan kontrol latensi (startBufferDuration, highBufferDuration, dan maxBufferDuration di AVPConfig). Jangan menyesuaikan pengaturan ini. Untuk informasi lebih lanjut, lihat Konfigurasi cache dan kontrol latensi untuk memeriksa apakah Anda telah menyesuaikan pengaturan cache dan kontrol latensi.
Setelah saya menjeda pemutaran, berpindah halaman, lalu kembali untuk melanjutkan pemutaran, terjadi error terkait audio 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 terjadi 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." di log.
Solusi: Periksa konflik dalam pengaturan audio (properti AudioSession). Misalnya, saat Anda keluar dari halaman lain yang memiliki audio, sumber daya audio mungkin tidak dilepas tepat waktu (rekaman atau pemutaran audio terkait tidak dihentikan segera).
Terjadi error saat menggunakan AliListPlayer untuk memutar video HLS (m3u8)
Versi ApsaraVideo Player SDK sebelum V5.4.5.0 tidak mendukung penggunaan list player AliListPlayer untuk memutar video HLS (m3u8). Versi V5.4.5.0 dan lebih baru mendukung pemutaran video HLS (m3u8), tetapi Anda harus mengaktifkan caching lokal. Untuk informasi lebih lanjut tentang cara mengaktifkan caching lokal, lihat Caching lokal.
Tidak dapat memutar video di latar belakang
Gejala: ApsaraVideo Player SDK untuk iOS tidak mendukung pemutaran video di latar belakang (video terus diputar setelah pengguna menekan tombol Home). Demo juga gagal memutar video di latar belakang.
Solusi:
Aktifkan fitur pengumpulan data latar belakang di Xcode. Gambar berikut menunjukkan contohnya:

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 mungkin terjadi karena sumber video dibajak. Aktifkan fitur HTTPDNS pemutar untuk menangani masalah ini. Untuk informasi lebih lanjut, lihat Konfigurasi HTTPDNS untuk klien iOS.
Terjadi error unsupported protocol saat memutar stream 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 antara pemutar dan komponen RTS (AlivcArtc) serta pemutar harus memiliki nomor versi yang sama. Untuk informasi lebih lanjut tentang implementasi, lihat Implementasikan penarikan aliran RTS di klien iOS.
Jika video ditranskode ke beberapa definisi, definisi mana yang diputar oleh ApsaraVideo Player SDK secara default?
Urutan pemutaran default definisi adalah FD, LD, SD, HD, 2K, 4K, dan OD. Untuk informasi tentang definisi, lihat Definisi. ApsaraVideo Player SDK mencari definisi dalam urutan ini dan memutar video dalam definisi pertama yang ditemukan.
Cara menentukan definisi default untuk pemutaran video
Kode berikut memberikan contohnya:
// 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 yang 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.
Bagaimana cara mengonfigurasi video agar diputar tanpa watermark tetapi diunduh dengan watermark?
Transkode video ke beberapa definisi. Putar definisi tanpa watermark dan unduh definisi dengan watermark.
Mode landscape tidak berlaku
ApsaraVideo Player SDK untuk iOS tidak menyediakan metode untuk mengimplementasikan mode landscape. Anda perlu mengimplementasikan fitur ini berdasarkan API sistem iOS. Saat mengimplementasikan mode landscape, pastikan untuk mengatur dengan benar frame dari aliplayer.playerView.
Cara mendapatkan log
Saat meminta dukungan teknis dari Alibaba Cloud, kirimkan log untuk membantu kami menyelesaikan masalah Anda lebih efisien. Bagian berikut menjelaskan cara mendapatkan log:
Dapatkan log.
Atur tingkat log ke
LOG_LEVEL_TRACEsebelum mendapatkan log. Untuk informasi lebih lanjut, lihat Dapatkan log SDK.Berikan log yang dihasilkan kepada dukungan teknis Alibaba Cloud.
Untuk informasi lebih lanjut, lihat Dapatkan dukungan teknis.