All Products
Search
Document Center

ApsaraVideo VOD:Fitur dasar

Last Updated:Feb 11, 2026

Topik ini menjelaskan cara membuat instans pemutar dan menggunakan fitur dasar ApsaraVideo Player SDK untuk iOS, seperti mengatur volume, melakukan pencarian video, memantau status pemutaran, mengaktifkan putar ulang berulang, mengonfigurasi kecepatan pemutaran, dan mengalihkan track audio.

Penting

Untuk menjalankan dan menguji demo, unduh dan ikuti petunjuk di Jalankan demo untuk mengompilasi dan menjalankan.

Konfigurasikan sumber pemutaran

  • ApsaraVideo Player SDK untuk iOS mendukung empat metode pemutaran video sesuai permintaan: VidAuth (direkomendasikan untuk pengguna ApsaraVideo VOD), VidSts, UrlSource, dan pemutaran terenkripsi.

  • ApsaraVideo Player SDK untuk iOS mendukung dua metode streaming langsung: UrlSource dan pemutaran terenkripsi.

Mainkan video sesuai permintaan

Pemutaran berbasis VidAuth (direkomendasikan)

Untuk memutar video sesuai permintaan menggunakan VidAuth, atur properti vid ke ID video atau audio dan atur properti playAuth ke kredensial pemutaran.

  • Setelah mengunggah file video atau audio, masuk ke Konsol ApsaraVideo VOD dan pilih Media Files > Audio/Video untuk melihat ID. Atau, panggil operasi SearchMedia yang disediakan oleh ApsaraVideo VOD SDK untuk mengambil ID.

  • Panggil operasi GetVideoPlayAuth untuk mengambil kredensial pemutaran. Kami menyarankan agar Anda mengintegrasikan ApsaraVideo VOD server-side SDK untuk mendapatkan kredensial pemutaran media guna menghindari perhitungan tanda tangan yang kompleks. Untuk informasi lebih lanjut tentang operasi GetVideoPlayAuth, lihat OpenAPI Explorer.

Kami merekomendasikan pengguna ApsaraVideo VOD untuk menggunakan metode ini. Dibandingkan dengan pemutaran berbasis STS, pemutaran berbasis VidAuth lebih mudah digunakan dan lebih aman. Untuk informasi lebih lanjut tentang perbandingan antara kedua metode tersebut, lihat Perbandingan antara kredensial dan STS.

Jika Anda mengaktifkan transmisi langsung parameter untuk Enkripsi HLS di Konsol ApsaraVideo VOD, nama parameter default adalah MtsHIsUriToken. Untuk informasi lebih lanjut, lihat Transmisi langsung parameter untuk Enkripsi HLS. Gunakan kode berikut untuk menambahkan nilai MtsHIsUriToken ke sumber VOD.

AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init];
authSource.vid = @"Vid"; // Wajib diisi. ID video.
authSource.playAuth = @"<yourPlayAuth>"; // Wajib diisi. Kredensial pemutaran. Untuk mendapatkan kredensial pemutaran, panggil operasi GetVideoPlayAuth di ApsaraVideo VOD.
authSource.region = @"Access region"; // Parameter ini sudah tidak digunakan lagi di ApsaraVideo Player SDK V5.5.5.0 atau versi lebih baru. Jika Anda menggunakan ApsaraVideo Player SDK V5.5.5.0 atau versi lebih baru, pemutar akan secara otomatis mengurai informasi wilayah. Jika Anda menggunakan ApsaraVideo Player SDK V5.5.5.0 atau versi sebelumnya, parameter ini wajib diisi. Tentukan ID wilayah tempat ApsaraVideo VOD diaktifkan untuk parameter ini. Nilai default: cn-shanghai.
// authSource.authTimeout = 3600; // Periode validitas URL pemutaran. Satuan: detik. Nilai default: 3600. Jika Anda telah mengonfigurasi periode validitas untuk URL yang ditandatangani di Konsol ApsaraVideo VOD, konfigurasi parameter ini akan diutamakan. Jika Anda tidak mengisi parameter ini, nilai default 3600 akan digunakan. Periode validitas harus lebih lama dari durasi aktual video. Jika tidak, URL pemutaran akan kedaluwarsa sebelum pemutaran selesai.

// Jika Anda telah mengaktifkan transmisi langsung parameter untuk Enkripsi HLS di Konsol ApsaraVideo VOD dan nama parameter default adalah MtsHlsUriToken, Anda perlu mengatur parameter config dan meneruskannya ke VID. Untuk informasi lebih lanjut, lihat kode berikut.
// Jika Anda belum mengaktifkan transmisi langsung parameter untuk Enkripsi HLS di Konsol ApsaraVideo VOD, Anda tidak perlu mengintegrasikan kode berikut.
VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init];
[vp setHlsUriToken:yourMtsHlsUriToken];
authSource.playConfig = [vp generatePlayerConfig];

[self.player setAuthSource:authSource];

Pemutaran VOD VidSts

Pemutaran berbasis VidSts menggunakan token STS temporary alih-alih kredensial pemutaran. Anda harus mengambil token STS beserta pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) sebelum memutar video sesuai permintaan. Untuk informasi lebih lanjut tentang cara mengambil token STS, lihat Dapatkan token STS.

Jika Anda mengaktifkan transmisi langsung parameter untuk Enkripsi HLS di Konsol ApsaraVideo VOD, nama parameter default adalah MtsHIsUriToken. Untuk informasi lebih lanjut, lihat Transmisi langsung parameter untuk Enkripsi HLS. Gunakan kode berikut untuk menambahkan nilai MtsHIsUriToken ke sumber VOD.

AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
source.vid = @"Vid"; // Wajib diisi. ID video.
source.region = @"Access region"; // Wajib diisi. Wilayah tempat ApsaraVideo VOD diaktifkan. Nilai default: cn-shanghai.
source.securityToken = @"<yourSecurityToken>"; // Wajib diisi. Token STS. Untuk menghasilkan token STS, panggil operasi AssumeRole di STS.
source.accessKeySecret = @"<yourAccessKeySecret>"; // Wajib diisi. Rahasia AccessKey yang dihasilkan saat token STS temporary diterbitkan. Untuk menghasilkan Rahasia AccessKey, panggil operasi AssumeRole di STS.
source.accessKeyId = @"<yourAccessKeyId>"; // Wajib diisi. ID AccessKey yang dihasilkan saat token STS temporary diterbitkan. Untuk menghasilkan ID AccessKey, panggil operasi AssumeRole di STS.
// source.authTimeout = 3600; // Periode validitas URL pemutaran. Satuan: detik. Nilai default: 3600. Jika Anda telah mengonfigurasi periode validitas untuk URL yang ditandatangani di Konsol ApsaraVideo VOD, konfigurasi parameter ini akan diutamakan. Jika Anda tidak mengisi parameter ini, nilai default 3600 akan digunakan. Periode validitas harus lebih lama dari durasi aktual video. Jika tidak, URL pemutaran akan kedaluwarsa sebelum pemutaran selesai.
// Jika Anda telah mengaktifkan transmisi langsung parameter untuk Enkripsi HLS di Konsol ApsaraVideo VOD dan nama parameter default adalah MtsHlsUriToken, Anda perlu mengatur parameter config dan meneruskannya ke VID. Untuk informasi lebih lanjut, lihat kode berikut.
// Jika Anda belum mengaktifkan transmisi langsung parameter untuk Enkripsi HLS di Konsol ApsaraVideo VOD, Anda tidak perlu mengintegrasikan kode berikut.
VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init];
[vp setHlsUriToken:yourMtsHlsUriToken];
source.playConfig = [vp generatePlayerConfig];
// Konfigurasikan sumber pemutaran.
[self.player setStsSource:source]

Pemutaran berbasis UrlSource

Untuk memutar video sesuai permintaan menggunakan UrlSource, atur properti source pemutar ke URL pemutaran.

  • URL pemutaran di ApsaraVideo VOD: Panggil operasi GetPlayInfo untuk mengambil URL pemutaran. Kami menyarankan agar Anda mengintegrasikan ApsaraVideo VOD server-side SDK untuk mengambil URL pemutaran guna menghindari perhitungan tanda tangan yang kompleks. Untuk informasi lebih lanjut tentang operasi GetPlayInfo, lihat OpenAPI Explorer.

  • Jalur video lokal: Pastikan aplikasi Anda memiliki izin akses. Gunakan API sistem untuk mengambil jalur lengkap file video lokal. Contoh: /sdcard/xxx/xxx/xxx.mp4 atau content://xxx/xxx/xx.mp4.

AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // Wajib diisi. URL pemutaran. URL dapat dihasilkan oleh ApsaraVideo VOD atau layanan pihak ketiga. Anda juga dapat menggunakan jalur video lokal.
[self.player setUrlSource:urlSource]; 

Pemutaran video sesuai permintaan terenkripsi

ApsaraVideo VOD mendukung tiga metode enkripsi: Enkripsi HTTP Live Streaming (HLS), Enkripsi privat Alibaba Cloud, dan enkripsi manajemen hak digital (DRM). Untuk informasi lebih lanjut, lihat Putar video terenkripsi.

Streaming langsung

Untuk informasi lebih lanjut, lihat Pemutaran streaming langsung standar.

Catatan
  • Metode UrlSource digunakan untuk pemutaran berbasis URL, sedangkan metode VidSts dan VidAuth digunakan untuk pemutaran berbasis ID video.

  • Untuk informasi lebih lanjut tentang wilayah yang mendukung ApsaraVideo VOD, lihat ID wilayah ApsaraVideo VOD.

Kontrol pemutaran

ApsaraVideo Player SDK untuk iOS memungkinkan Anda mengelola pemutaran media, seperti memulai atau menjeda pemutaran, serta memulai pemutaran dari titik waktu tertentu.

Persiapkan pemutar

Panggil metode prepare untuk mempersiapkan pemutar sebelum pemutaran. Contoh kode:

[self.player prepare];

Mulai pemutaran

Panggil metode start untuk memulai pemutaran. Contoh kode:

[self.player start];

Mulai pemutaran dari titik waktu tertentu

Panggil metode seekToTime untuk memulai pemutaran dari titik waktu tertentu. Fitur ini digunakan ketika pengguna menyeret slider pada bilah kemajuan atau melanjutkan pemutaran dari titik waktu tertentu. Contoh kode:

// position menunjukkan titik waktu dari mana Anda ingin memutar video. Satuan: milidetik. Gunakan seekMode untuk menentukan mode pencarian akurat atau tidak akurat.
// Gunakan mode pencarian akurat.
[self.player seekToTime:position seekMode:AVP_SEEKMODE_ACCURATE];
// Gunakan mode pencarian tidak akurat.
[self.player seekToTime:position seekMode:AVP_SEEKMODE_INACCURATE];

Panggil metode setStartTime untuk mengatur waktu mulai video. Pengaturan ini hanya berlaku sekali per panggilan prepare. Gunakan fitur ini saat memulai pemutaran video dari titik waktu tertentu. Contoh kode:

// Atur waktu mulai (dalam milidetik) untuk panggilan prepare berikutnya. Pengaturan ini hanya berlaku untuk panggilan prepare berikutnya.
// Setelah prepare dipanggil, nilai ini akan otomatis dihapus. Jika Anda tidak memanggil metode ini lagi sebelum panggilan prepare berikutnya, video akan dimulai dari awal.
// seekMode dapat diatur ke mode akurat atau tidak akurat.
[self.player setStartTime:time seekMode:seekMode];

Jeda pemutaran

Panggil metode pause untuk menjeda pemutaran. Contoh kode:

[self.player pause];

Lanjutkan pemutaran

Panggil metode start untuk melanjutkan pemutaran. Contoh kode:

[self.player start];

Hentikan pemutaran

Panggil metode stop untuk menghentikan pemutaran. Contoh kode:

[self.player stop];

Hancurkan pemain

Anda dapat menghapus pemutar secara sinkron atau asinkron. Contoh kode:

// Menghapus pemutar secara sinkron. Sistem secara otomatis memanggil operasi stop.
[self.player destroy];
// Menghapus pemutar secara asinkron. Sistem secara otomatis memanggil operasi stop.
[self.player destroyAsync];
Catatan

Operasi penghapusan sinkron mengembalikan hasil setelah sumber daya pemutar dilepas. Jika Anda memiliki persyaratan tinggi terhadap kecepatan respons UI, kami menyarankan agar Anda memanggil metode penghapusan asinkron. Catatan penggunaan:

  1. Jangan melakukan operasi lain pada objek pemutar selama proses penghapusan asinkron.

  2. Metode penghapusan asinkron mencakup proses stop asinkron. Oleh karena itu, Anda tidak perlu menghentikan pemutar secara manual sebelum memanggil metode penghapusan asinkron.

Memantau status pemutar

ApsaraVideo Player SDK untuk iOS memungkinkan Anda mengonfigurasi pendengar dan memantau status pemutar.

Konfigurasikan pendengar

Anda dapat mengonfigurasi beberapa pendengar untuk pemutar Anda.

  • Kami menyarankan agar Anda mengonfigurasi callback onPlayerEvent dan onError.

@interface SimplePlayerViewController ()<AVPDelegate>
@end
- (void)viewDidLoad {
    self.player = [[AliPlayer alloc] init];
    self.player.playerView = self.avpPlayerView.playerView;
    self.player.delegate = self;
    //...
}
/**
 @brief Callback untuk delegasi yang tidak valid.
 @param player Pointer pemutar.
 @param errorModel Deskripsi kesalahan pemutar. Untuk informasi lebih lanjut, lihat definisi AliVcPlayerErrorModel.
 */
- (void)onError:(AliPlayer*)player errorModel:(AVPErrorModel *)errorModel {
    // Menunjukkan bahwa terjadi kesalahan dan pemutaran dihentikan.
}
/**
 @brief Callback untuk event pemutar.
 @param player Pointer pemutar.
 @param eventType Jenis event pemutar. Untuk informasi lebih lanjut, lihat definisi AVPEventType.
 */
-(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType{
    switch(eventType){
        case AVPEventPrepareDone:{
            // Pemutar telah siap.
        }
            break;
        case AVPEventAutoPlayStart:
            // Putar otomatis dimulai.
            break;
        case AVPEventFirstRenderedStart:
            // Tampilan frame pertama.
            break;
        case AVPEventCompletion:
            // Pemutaran selesai.
            break;
        case AVPEventLoadingStart:
            // Buffering dimulai.
            break;
        case AVPEventLoadingEnd:
            // Buffering selesai.
            break;
        case AVPEventSeekEnd:
            // Pencarian selesai.
            break;
        case AVPEventLoopingStart:
            // Putar ulang berulang dimulai.
            break;
        default:
            break;
    }
}
/**
 @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 {
    // Memperbarui kemajuan pemutaran.
}
/**
 @brief Callback untuk posisi buffer.
 @param player Pointer pemutar.
 @param position Posisi buffer saat ini.
 */
- (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
    // Memperbarui kemajuan buffering.
}
/**
 @brief Callback untuk mendapatkan informasi track.
 @param player Pointer pemutar.
 @param info Array informasi track. Untuk informasi lebih lanjut, lihat AVPTrackInfo.
 */
- (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
    // Mendapatkan informasi tentang bitrate berbeda.
}
/**
 @brief Callback untuk menampilkan subtitle.
 @param player Pointer pemutar.
 @param index Nomor indeks subtitle.
 @param subtitle String subtitle.
 */
- (void)onSubtitleShow:(AliPlayer*)player index:(int)index subtitle:(NSString *)subtitle {
    // Mendapatkan subtitle untuk ditampilkan.
}
/**
 @brief Callback untuk menyembunyikan subtitle.
 @param player Pointer pemutar.
 @param index Nomor indeks subtitle.
 */
- (void)onSubtitleHide:(AliPlayer*)player index:(int)index {
    // Menyembunyikan subtitle.
}
/**
 @brief Callback untuk pengambilan snapshot.
 @param player Pointer pemutar.
 @param image Gambar.
 */
- (void)onCaptureScreen:(AliPlayer *)player image:(UIImage *)image {
    // Pratinjau dan simpan snapshot.
}
/**
 @brief Callback yang menunjukkan bahwa track telah dialihkan.
 @param player Pointer pemutar.
 @param info Informasi tentang pengalihan setelah pengalihan selesai. Untuk informasi lebih lanjut, lihat AVPTrackInfo.
 */
- (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
    // Kirim notifikasi tentang hasil pengalihan bitrate.
}

Pantau status pemutaran

Anda dapat mendengarkan status pemutar. Parameter dalam callback onPlayerStatusChanged menunjukkan status saat ini dari pemutar. Contoh kode:

- (void)onPlayerStatusChanged:(AliPlayer*)player oldStatus:(AVPStatus)oldStatus newStatus:(AVPStatus)newStatus {
    switch (newStatus) {
    case AVPStatusIdle:{
           // Pemutar dalam keadaan idle.
        }
 break;
        case AVPStatusInitialzed:{
           // Pemutar telah diinisialisasi.
        }
 break;
        case AVPStatusPrepared:{
           // Pemutar telah siap.
        }
 break;
        case AVPStatusStarted:{
           // Pemutar sedang memutar aliran media.
        }
 break;
case AVPStatusPaused:{
           // Pemutaran dijeda.
        }
 break;
case AVPStatusStopped:{
           // Pemutaran dihentikan.
        }
 break;
case AVPStatusCompletion:{
           // Pemutaran selesai.
        }
 break;
case AVPStatusError:{
           // Terjadi kesalahan pemutaran.
        }
 break;
        default:
            break;
    }
}

Tentukan mode tampilan

ApsaraVideo Player SDK untuk iOS memungkinkan Anda mengonfigurasi pengaturan tampilan untuk pemutaran, seperti menentukan cara gambar video diskalakan, diputar, atau dicerminkan.

Padding

Mendukung tiga mode pengisian tampilan—aspect ratio fit, aspect ratio fill, dan stretch fill—yang diimplementasikan melalui antarmuka scalingMode. Contohnya sebagai berikut:

// Skala video agar sesuai dengan tampilan. Rasio aspek video dipertahankan.
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT;
// Skala video agar mengisi tampilan. Rasio aspek video dipertahankan.
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFILL;
// Regangkan video agar mengisi tampilan. Rasio aspek video tidak dipertahankan. Jika rasio aspek video dan tampilan berbeda, distorsi gambar dapat terjadi.
self.player.scalingMode = AVP_SCALINGMODE_SCALETOFILL;
Catatan

Konfigurasi penskalaan tidak berlaku untuk video yang diputar dalam mode picture-in-picture (PiP).

Rotasi

Panggil metode rotateMode untuk menyesuaikan rotasi video. Contoh kode:

// Atur sudut rotasi ke 0° searah jarum jam.
self.player.rotateMode = AVP_ROTATE_0;
// Atur sudut rotasi ke 90° searah jarum jam.
self.player.rotateMode = AVP_ROTATE_90;
// Atur sudut rotasi ke 180° searah jarum jam.
self.player.rotateMode = AVP_ROTATE_180;
// Atur sudut rotasi ke 270° searah jarum jam.
self.player.rotateMode = AVP_ROTATE_270;

Pencerminan

Panggil metode mirrorMode untuk menentukan mode pencerminan. Pencerminan horizontal, pencerminan vertikal, dan tanpa pencerminan didukung. Contoh kode:

// Tentukan tanpa pencerminan untuk gambar video.
self.player.mirrorMode = AVP_MIRRORMODE_NONE;
// Tentukan pencerminan horizontal untuk gambar video.
self.player.mirrorMode = AVP_MIRRORMODE_HORIZONTAL;
// Tentukan pencerminan vertikal untuk gambar video.
self.player.mirrorMode = AVP_MIRRORMODE_VERTICAL;

Dapatkan informasi tentang pemutaran

ApsaraVideo Player SDK untuk iOS memungkinkan Anda mendapatkan informasi pemutaran, seperti kemajuan pemutaran saat ini, durasi video, dan kemajuan buffering.

Dapatkan kemajuan pemutaran saat ini

Anda dapat mengkueri posisi pemutaran saat ini dalam callback onCurrentPositionUpdate. Contoh kode:

- (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
// Parameter position menunjukkan posisi pemutaran saat ini. Satuan: milidetik.
NSString *position = [NSString stringWithFormat:@"%lld, position"];
}

Dapatkan durasi video

Anda dapat mengkueri durasi total video. Durasi video hanya dapat diambil setelah video dimuat, misalnya setelah callback onPrepared dipanggil. Satuan: milidetik. Contoh kode:

-(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
  switch (eventType) {
    case AVPEventPrepareDone: {
      if (self.player.duration >= 0) {
       NSString *duration  = self.player.duration;
      }
    }
      break;
    default:
      break;
  }
}

Dapatkan durasi pemutaran aktual

Anda dapat mengambil durasi pemutaran aktual secara real time, yang tidak termasuk waktu ketika pemutaran dijeda atau macet. Contoh kode:

 NSString *duration = [player getPlayedDuration];

Dapatkan kemajuan buffering

Anda dapat mengkueri posisi buffer saat ini dalam callback onBufferedPositionUpdate. Contoh kode:

- (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
    NSString *bufferPosition = position;
}

Dapatkan laju frame rendering, bitrate audio dan video, serta bitrate downlink jaringan secara real time

Contohnya:

// Dapatkan laju frame saat ini untuk rendering video. Data yang dikembalikan bertipe FLOAT.
[self.player getOption:AVP_OPTION_RENDER_FPS]
// Dapatkan bitrate video saat ini. Data yang dikembalikan bertipe FLOAT. Satuan: bit/s.
[self.player getOption:AVP_OPTION_VIDEO_BITRATE]
// Dapatkan bitrate audio saat ini. Data yang dikembalikan bertipe FLOAT. Satuan: bit/s.
[self.player getOption:AVP_OPTION_AUDIO_BITRATE]
// Dapatkan bitrate downlink jaringan saat ini. Data yang dikembalikan bertipe FLOAT. Satuan: bit/s.
[self.player getOption:AVP_OPTION_DOWNLOAD_BITRATE]

Tentukan volume

Anda dapat menyesuaikan volume pemutar atau mengonfigurasi mode bisu untuk pemutaran.

Sesuaikan volume

Anda dapat mengubah volume video hingga dua kali volume aslinya. Noise dapat terjadi jika Anda mengatur nilainya lebih dari 1. Panggil metode volume untuk mengubah volume. Setelah mengatur volume, Anda dapat mengkueri informasi volumenya. Contoh kode:

// Atur volume ke angka real dari 0 hingga 2.
self.player.volume = 1.0f;
// Dapatkan volume.
self.player.volume

Konfigurasikan mode bisu

Panggil metode muted untuk membisukan video yang sedang diputar. Contoh kode:

self.player.muted = YES;

Atur kecepatan pemutaran

ApsaraVideo Player SDK untuk iOS memungkinkan Anda memanggil metode rate untuk mengubah kecepatan pemutaran. Kecepatan pemutaran mulai dari 0,5x hingga 5x didukung. Pitch audio tetap tidak berubah pada kecepatan berbeda. Contoh kode:

// Kecepatan pemutaran mulai dari 0,5x hingga 5x didukung. Kecepatan pemutaran umum adalah kelipatan 0,5x, seperti 0,5x, 1x, dan 1,5x.
self.player.rate = 1.0f;

Pengaturan Resolusi Ganda

Catatan

Untuk contoh kode detail, lihat modul API-Example Pengalihan multi-resolusi (MultiResolution). Proyek ini merupakan proyek sampel Objective-C untuk ApsaraVideo Player SDK untuk iOS dan membantu pengembang dengan cepat mempelajari cara mengintegrasikan fitur inti SDK.

Konfigurasikan streaming langsung berbasis UrlSource

Untuk informasi lebih lanjut, lihat Pemutaran streaming langsung standar.

Konfigurasikan pemutaran berbasis VidAuth atau VidSts

Jika Anda menggunakan VidAuth atau VidSts untuk memutar video sesuai permintaan, tidak diperlukan pengaturan tambahan. ApsaraVideo Player SDK untuk iOS secara otomatis mengambil definisi video dari ApsaraVideo VOD. SDK memungkinkan Anda mengambil definisi video dan mengalihkannya. Fitur ini tidak didukung untuk pemutaran berbasis UrlSource.

Kueri definisi

Setelah video dimuat, Anda dapat mengambil definisinya. Bitrate dapat diambil dari parameter trackBitrate yang bersarang di bawah parameter info dalam callback onTrackReady.

- (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
    for (int i=0; i<info.count; i++) {
        AVPTrackInfo* track = [info objectAtIndex:i];
        switch (track.trackType) {
            case AVPTRACK_TYPE_VIDEO: {
                int trackBitrate = track.trackBitrate;
            }
                break;
        }
    }
}

Alihkan Resolusi

Panggil metode selectTrack dan tentukan indeks yang sesuai dengan definisi yang ingin Anda alihkan. Indeks tersebut dapat diperoleh dari parameter TrackInfo.

[self.player selectTrack:index];

Notifikasi Pengalihan Resolusi

Callback onTrackChanged dipanggil setelah definisi video dialihkan.

- (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
 // Pengalihan selesai
}

Pengalihan cepat

Setelah Anda mengaktifkan mode Pengalihan Cepat, setiap panggilan manual ke selectTrack akan memberikan respons cepat.

AVPConfig *config = [self.player getConfig];
config.selectTrackBufferMode = 1;
[self.player setConfig:config];

Aktifkan putar ulang berulang

ApsaraVideo Player SDK untuk iOS mendukung putar ulang berulang. Panggil metode loop untuk mengaktifkan putar ulang berulang. Fitur ini memutar ulang video dari awal setelah pemutaran selesai. Contoh kode:

self.player.loop = YES;

Callback AVPEventLoopingStart dikembalikan ketika putar ulang berulang dimulai. Contoh kode:

- (void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
    switch (eventType) {
        case AVPEventLoopingStart:
            break;
    }
}

Alihkan track audio

iOS Player SDK memungkinkan Anda mengalihkan track audio saat menonton video dengan dubbing multibahasa, sehingga Anda dapat memilih bahasa dubbing yang diinginkan.

Catatan penggunaan

Anda dapat mengalihkan track audio dalam aliran yang tidak digunakan untuk putar balik daftar, seperti aliran MP4, aliran HLS campuran single-bitrate, track audio dalam aliran HLS single-bitrate, dan substream dalam aliran HLS campuran multi-bitrate. Tabel berikut menjelaskan berbagai jenis aliran video.

Jenis Aliran Video

Ekstensi file

Jumlah bitrate

Jumlah file sub-M3U8

Jenis substream

Catatan Pengalihan

Aliran non-daftar (seperti aliran MP4)

.mp4

1

-

Aliran yang berisi satu track video, beberapa track audio, dan beberapa track subtitle.

Anda dapat mengalihkan antar track audio.

Aliran HLS campuran single-bitrate

.m3u8

1

1

Aliran yang berisi satu track video, beberapa track audio, dan beberapa track subtitle.

Anda dapat mengalihkan antar track audio.

Aliran HLS single-bitrate

.m3u8

1

n

m3u8: Setiap substream harus berupa salah satu dari berikut: aliran video, aliran audio, atau aliran caption.

Anda dapat mengalihkan antar track audio.

Aliran HLS campuran multi-bitrate

.m3u8

n

n

Aliran M3U8 yang berisi satu track video, beberapa track audio, dan beberapa track subtitle. Substream memiliki bitrate berbeda.

Anda dapat mengalihkan antar substream. Anda tidak dapat mengalihkan antar track audio dalam satu substream.

Contoh

  1. Konfigurasikan callback.

      // Callback onSubTrackReady biasanya dipicu sebelum callback prepare.
    - (void)onSubTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
        // Panggil getSubMediaInfo untuk mengambil MediaInfo yang sesuai secara proaktif. Anda hanya dapat memanggil metode ini setelah menerima callback onSubTrackReady; jika tidak, metode ini akan mengembalikan nilai nil.
        AVPMediaInfo* subMediaInfo = [player getSubMediaInfo];
        // Menelusuri trek-trek.
        for (int i=0; i<subMediaInfo.tracks.count; i++) {
        	AVPTrackInfo* track = [mediaInfo.tracks objectAtIndex:i];
            // Mengambil trek yang sesuai.
        }
    }
  2. Alihkan ke track audio yang diinginkan.

    [self.player selectTrack:myTrack.trackIndex accurate:YES]

Penggunaan Gambar Mini

Catatan

Untuk contoh kode detail, lihat modul API-Example Pratinjau gambar mini. Proyek ini merupakan proyek sampel Objective-C untuk ApsaraVideo Player SDK untuk iOS dan membantu pengembang dengan cepat mempelajari cara mengintegrasikan fitur inti SDK.

Sebelum menggunakan fitur gambar mini di ApsaraVideo Player SDK, pastikan gambar mini telah dikonfigurasi untuk video tersebut. Untuk menghasilkan gambar mini, buka Konsol ApsaraVideo VOD, buat templat snapshot, dan pilih Image Sprite sebagai Jenis Snapshot. Buat alur kerja untuk memproses video berdasarkan templat snapshot tersebut. Kemudian, snapshot sprite dibuat untuk video tersebut. Untuk informasi lebih lanjut, lihat Snapshot video. Contoh kode berikut menunjukkan cara menggunakan fitur gambar mini di ApsaraVideo Player SDK:

/**
 Menentukan apakah gambar mini dikonfigurasi untuk track tersebut. Tidak ada gambar mini yang ditampilkan jika Anda tidak mengonfigurasi gambar mini.
 */
@property (nonatomic,assign)BOOL trackHasThumbnai;

/**
 Buat tampilan kustom yang menampilkan gambar mini.
 */
@property (nonatomic,strong)UIImageView *thumbnaiView;

/**
  onPrepare
 */
- (void)onPlayerStatusChanged:(AliPlayer*)player oldStatus:(AVPStatus)oldStatus newStatus:(AVPStatus)newStatus {
  if(newStatus == AVPStatusPrepared){
       [self.player setThumbnailUrl:[URL];// Tentukan URL gambar mini. Anda dapat memperoleh URL gambar mini di Konsol ApsaraVideo VOD atau dengan memanggil operasi API.
       self.trackHasThumbnai = YES;
  }
}
/**
 Callback untuk mengubah posisi pemutaran pada bilah kemajuan.
 @param playerView playerView
 @param value: Posisi pemutaran.
 */
- (void)AVPPlayerView:(AVPPlayerView *)playerView progressSliderValueChanged:(CGFloat)value {
    if (self.trackHasThumbnai) {
        [self.player getThumbnail:self.player.duration*value];
    }
}

/**
 @brief: Callback yang dikembalikan ketika gambar mini diperoleh.
 @param positionMs: Posisi gambar mini yang ditentukan.
 @param fromPos: Posisi pemutaran dari mana gambar mini digunakan.
 @param toPos: Posisi pemutaran di mana gambar mini tidak lagi digunakan.
 @param image: Pointer untuk gambar mini. NSImage digunakan untuk macOS dan UIImage digunakan untuk iOS.
 */
- (void)onGetThumbnailSuc:(int64_t)positionMs fromPos:(int64_t)fromPos toPos:(int64_t)toPos image:(id)image {
    self.thumbnaiView.hidden = NO;
    [self.thumbnaiView setImage:(UIImage *)image];
}

/**
 @brief: Callback yang dikembalikan ketika gambar mini gagal diperoleh.
 @param positionMs: Posisi gambar mini yang ditentukan.
 */
- (void)onGetThumbnailFailed:(int64_t)positionMs {
    self.thumbnaiView.hidden = YES;
}

Dapatkan log SDK

Log SDK dihasilkan saat Anda menggunakan ApsaraVideo Player SDK. Log tersebut berisi informasi detail seperti status permintaan, hasil pemanggilan, dan hasil permohonan izin. Anda dapat melakukan debugging kode dan troubleshooting masalah dengan melihat log SDK untuk memfasilitasi pengembangan. Anda dapat menggunakan salah satu metode berikut untuk mendapatkan log SDK.

Metode 1: Gunakan konsol alat pengembangan Anda

Metode ini menangkap log pada perangkat lokal Anda dan cocok untuk skenario di mana Anda dapat mereproduksi kesalahan secara andal pada perangkat Anda.

  1. Aktifkan fitur logging dan atur tingkat log.

    // Aktifkan fitur logging.
    [AliPlayer setEnableLog:YES];
    // Atur tingkat log. Nilai default: LOG_LEVEL_INFO. Untuk troubleshooting masalah, atur parameter ini ke LOG_LEVEL_TRACE.
    [AliPlayer setLogCallbackInfo:LOG_LEVEL_INFO callbackBlock:nil];
  2. Konfigurasikan log tingkat frame.

    // Konfigurasikan pencetakan log tingkat frame.
    // Nilai parameter value yang valid: 0 dan 1. Nilai 0 menunjukkan dinonaktifkan. Nilai 1 menunjukkan diaktifkan.
    [AliPlayer setLogOption:FRAME_LEVEL_LOGGING_ENABLED value:value];
    Catatan

    Fitur ini digunakan dalam skenario troubleshooting.

  3. Kumpulkan log.

    1. Metode 1: Lihat log di konsol alat pengembangan Anda

      Reproduksi kesalahan dan dapatkan log kesalahan di konsol alat pengembangan Anda seperti Xcode.

    2. Metode 2: Ekspor log ke jalur tertentu

      1. Setelah mengaktifkan fitur logging, tentukan jalur sandbox tempat log kesalahan disimpan sebelum membuat instans pemutar.

        NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
        NSString *documentDirectory = [paths objectAtIndex:0];
        // logFilePath adalah jalur contoh. Anda juga dapat membuat file .log di direktori sandbox. Misalnya, xxxx.log.
        NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:@"xxxx.log"];
      2. Impor data log ke file yang Anda tentukan.

        freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stdout);
        freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stderr);
      3. Reproduksi kesalahan dan temukan file .log di jalur yang Anda tentukan.

Metode 2: Atur LogCallback untuk menerima log ApsaraVideo Player SDK

Metode ini menggunakan LogCallback dan cocok untuk skenario di mana kesalahan terjadi di sisi klien tetapi Anda tidak dapat mereproduksi kesalahan secara andal dan menangkap log pada perangkat Anda. Panggil LogCallback untuk mendengarkan ekspor log ApsaraVideo Player SDK dan secara otomatis mengekspor log kesalahan ke saluran log aplikasi Anda.

  1. Aktifkan fitur logging dan atur tingkat log.

    // Aktifkan fitur logging.
    [AliPlayer setEnableLog:YES];
    // Atur tingkat log. Nilai default: LOG_LEVEL_INFO. Untuk troubleshooting masalah, atur parameter ini ke LOG_LEVEL_TRACE.
    [AliPlayer setLogCallbackInfo:LOG_LEVEL_INFO callbackBlock:^(AVPLogLevel logLevel, NSString *strLog) {
     NSLog(@"strLog:%@", strLog);
    }];
  2. Kumpulkan log.

    Setelah mereproduksi masalah, log akan secara otomatis dikeluarkan melalui saluran log aplikasi Anda ke file lognya.