All Products
Search
Document Center

ApsaraVideo VOD:FAQ about ApsaraVideo Player SDK for iOS

Last Updated:Jul 22, 2025

This topic provides answers to some commonly asked questions about ApsaraVideo Player SDK for iOS.

FAQ about licenses

For issues related to invalid or expired licenses, see FAQ about licenses.

Common issues across all platforms

Development issues

Errors when packaging and submitting to App Store review using iOS Xcode 14

Bitcode-related errors

Problem description: After an app is packaged and submitted to the App Store using Xcode 14, a bitcode-related error is returned during the review. Example:

 ITMS-90482: Invalid Executable - The executable 'xxx.app/Frameworks/alivcffmpeg.framework/alivcffmpeg' contains bitcode.

Solution: Use xcrun bitcode_strip to remove bitcode from your framework. In the following example, ${framework_path} is the path to the binary file of the framework.

xcrun bitcode_strip ${framework_path} -r -o ${framework_path}

Curl-related errors

Problem description: After an app is packaged and submitted to the App Store using Xcode 14, a cURL error is returned during the review. Example:

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/

Solution:

  • If you integrate only ApsaraVideo Player SDK for iOS (AliPlayerSDK_iOS) in your project, we recommend that you update the SDK to V5.4.9.2 or later.

  • If you integrate ApsaraVideo Player SDK for iOS (AliPlayerPartSDK_iOS) and the short video SDK into your project, we recommend that you update ApsaraVideo Player SDK to V5.4.9.2 or later, AlivcFFmpeg (QuCore-ThirdParty) to V4.3.6, and the short video SDK to V3.26 or later.

Non-public method errors

Problem description: After an app is packaged and submitted to the App Store using Xcode 14, an error related to non-public methods is returned during the review:xcode报错

Solution: This error is a validation bug in Xcode 14. In most cases, a project can be published after the project is built regardless of whether this error is returned. If your project cannot be published, we recommend that you use Xcode 13 to publish your project.

Errors related to frame interpolation and sharpening post-processing plugins such as mpf_filter.framework and vfi_filter.framework

Problem description: After an app is packaged and submitted to the App Store using Xcode 14, errors related to frame interpolation and sharpening post-processing plugins such as mpf_filter.framework and vfi_filter.framework are returned during the review:xcode报错2

Solution:

  • If you do not need to use the plug-ins that are listed in the error message, we recommend that you delete the plug-ins from your project. This reduces the size of the package and does not compromise the performance of the player.

  • If your project must use the plugins mentioned in the error message, you can temporarily remove the "_" from the value of the "Bundle identifier" key in the framework's Info.plist file, and then compile and build the project.

  • Update ApsaraVideo Player SDK to V5.5.2.0 or later, in which the issue related to plug-in names has been fixed.

What do I do if the error "PhaseScriptExecution failed with a nonzero exit code" occurs when I compile and run the iOS demo in Xcode?

Perform the following steps: 1. Go to the project directory. 2. Run pod deintegrate.

3. Run pod install.

Can I debug apps developed using ApsaraVideo Player SDK for iOS in the Xcode simulator?

  • ApsaraVideo Player SDK for iOS

    We recommend that you use a physical iPhone for debugging. Only ApsaraVideo Player SDK for iOS V5.4.7.1 and later can be debugged on the iOS simulator. However, you cannot debug apps on the iOS simulator for Mac machines equipped with the M1 chip.

Note

If you want to run ApsaraVideo Player SDK for iOS in the iPhone simulator and you use a Mac computer with Apple silicon, we recommend that you run ApsaraVideo Player SDK for iOS in Rosetta when you encounter compilation errors.

截屏2025-03-14 15

How do I obtain the current playback position?

By default, ApsaraVideo Player SDK returns a callback about the current playback position every 500 milliseconds. You can reduce the interval at which callbacks are returned to obtain playback positions more frequently. Sample code:

AVPConfig *config = [self.player getConfig];
config.positionTimerIntervalMs = 100; // Change the callback interval. Unit: milliseconds.
[self.player setConfig:config];

/**
 @brief: the callback for the current playback position.
 @param player: the pointer for the player.
 @param position: the current playback position.
 */
- (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
    // The current playback position.
    long currentPosition = position;
}

How do I obtain the width and height of a video?

You can obtain it in the following three ways:

  • Method 1: Call the prepare method in the AliPlayer instance. After the AVPEventPrepareDone event is complete, obtain the height and width of the AliPlayer instance.

    -(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
        if (eventType == AVPEventPrepareDone) {
          NSLog(@"Width:%d,Height:%d", player.width, player.height);
        }
    }
  • Method 2: Listen for the event that is triggered when the video size is changed.

    - (void)onVideoSizeChanged:(AliPlayer*)player width:(int)width height:(int)height rotation:(int)rotation {
        NSLog(@"Width:%d,Height:%d", width, height);
    }
  • Method 3: Configure callbacks to obtain the track information. You can obtain the width and height of the video from AVPTrackInfo in the returned array.

    Note

    This method depends heavily on network quality because requests are sent over the Internet to obtain data. We recommend that you use Method 1 or Method 2 to obtain the width and height of a video.

    - (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
        for (int i=0; i<info.count; i++) {
          AVPTrackInfo *trackInfo = info[i];
          NSLog(@"Width:%d,Height:%d", trackInfo.videoWidth, trackInfo.videoHeight);
      }
    }

What do I do if the progress handle skips from the seeking position?

Cause: The inaccurate seeking mode is used in the player. In this case, video playback starts from the keyframe nearest to the position you seek to.

Solution: Switch to the accurate seeking mode.

How do I switch between the accurate and inaccurate seeking modes?

The following sample code provides an example on how to switch the seeking mode:

// Switch to the inaccurate seeking mode.
[self.player seekToTime:1000 seekMode:AVP_SEEKMODE_INACCURATE];
// Switch to the accurate seeking mode.
[self.player seekToTime:1000 seekMode:AVP_SEEKMODE_ACCURATE];

What do I do if the progress handle skips from the seeking position when the accurate seeking mode is used?

Cause: Accurate seeking takes more time to complete than inaccurate seeking. When you seek to a playback position where the interval between the specified position and the nearest keyframe is longer than the maximum interval allowed for the accurate seeking mode, ApsaraVideo Player SDK automatically uses the inaccurate seeking mode for the seeking operation.

Solution: Call the setMaxAccurateSeekDelta operation to increase the maximum interval between the seeking position and the nearest keyframe allowed for the accurate seeking mode. This way, the seeking accuracy is improved but the response time is longer. We recommend that you set the maximum interval as needed. Sample code:

// Unit: milliseconds.
[self.player setMaxAccurateSeekDelta:10000];

Caching failures when using play-and-cache (CacheConfig)

Obtain the cause of the caching failure in the onPlayerEvent callback. The following sample code provides an example on how to configure the onPlayerEvent callback:

/**
 @brief: the callback for player events.
 @param player: the pointer for the player.
 @param eventWithString: the type of the player event.
 @param description: the description of the player event.
 @see AVPEventType
 */
-(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description {
    if (eventWithString == EVENT_PLAYER_CACHE_SUCCESS) { // Caching during playback succeeded.

    } else if (eventWithString == EVENT_PLAYER_CACHE_ERROR) { // Caching during playback failed.
        NSString *errorMsg = description;
    }
}

The following items list the common causes of caching failures:

  • The size and duration specified in CacheConfig do not match those of the video.

  • The position where you stop or seek during playback is outside the buffer.

Note

Preloading and local caching features are added to ApsaraVideo Player SDK V5.4.4.0. These features provide the same capabilities as the play-and-cache feature. We recommend that you use the new local caching feature. For more information, see Advanced features.

The error encrypt check fail occurs during video caching

Caching is a download process. If secure download is enabled, make sure that the encrypted verification file matches the app information. This requires you to download the encrypted verification file generated in Offline download and save it to the Player SDK. For more information, see Video download. Otherwise, caching or downloading fails.

Obtain media source data

The following sample code provides an example on how to obtain media source data:

// Set the rendering callback.
self.player.renderingDelegate = self;

// Listen to the rendering callback.
- (BOOL)onRenderingFrame:(CicadaFrameInfo*) frameInfo {
    if (frameInfo.frameType == Cicada_FrameType_Video) { // The underlying video data.

    } else if (frameInfo.frameType == Cicada_FrameType_Audio) { // The underlying audio data.

    }
    return NO;
}

How to obtain the pixels of each frame in the video player?

iOS player: You can obtain them by listening to the onRenderingFrame callback.

player.renderingDelegate = self;


#pragma mark CicadaRenderingDelegate
- (BOOL)onRenderingFrame:(CicadaFrameInfo*) frameInfo{
    if(frameInfo.frameType==Cicada_FrameType_Video){
        // Video
        NSLog(@"receive HW frame:%p pts:%ld foramt %d", frameInfo.video_pixelBuffer, frameInfo.pts, CVPixelBufferGetPixelFormatType(frameInfo.video_pixelBuffer));

    } else if (frameInfo.frameType==Cicada_FrameType_Audio){
        // Audio
    }
    return NO;
}

Automatic bitrate switching logic

When automatic bitrate switching is enabled by calling the [self.player selectTrack:SELECT_AVPTRACK_TYPE_VIDEO_AUTO]; interface, the player SDK internally monitors the current network speed. If the network speed reaches the threshold for the next bitrate within 10 seconds, the player switches to that bitrate. If the network speed does not reach the threshold within 10 seconds, no switching occurs.

  • When switching from a higher bitrate to a lower bitrate, if the 10-second average network speed meets the conditions for a lower bitrate, the video switches to a lower bitrate after the playback of cached content completes.

  • When switching from a lower bitrate to a higher bitrate, if the 10-second average network speed meets the conditions for a higher bitrate, the video immediately switches to a higher bitrate.

Custom retry logic

When network connection times out after 15 seconds, ApsaraVideo Player SDK tries to reconnect the network. By default, two retries are performed before an Error callback is fired.

You can customize the retry logic to receive notifications when retry events occur. Then, you can configure the retry logic. The following sample code provides an example:

AVPConfig *config = [self.player getConfig];
config.networkRetryCount = 0; // The number of retries. In this example, this parameter is set to 0.
[self.player setConfig:config];

/**
 @brief: The callback for player events.
 @param player: The pointer for the player.
 @param eventWithString: The type of the player event.
 @param description: The description of the player event.
 @see AVPEventType
 */
-(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description {
    if (eventWithString == EVENT_PLAYER_NETWORK_RETRY) { // The network connection fails. Try again.
        // Configure the retry logic.
    }
}

Playback failure with error 403 when playing HLS video streams with local caching enabled

Problem description: When local caching is enabled, playback of HTTP Live Streaming (HLS) video streams based on the VidAuth method fails and returns HTTP status code 403.

Cause: If you enable local caching for a video and stop the playback before the video is completely cached, the authentication information from the previous playback session is still used when you resume the playback. This causes authentication failure, resulting in HTTP status code 403.

Solution: For player SDK version 5.5.4.0 and later, if the video playback URL contains authentication parameters and the playback protocol is HLS, you can set the AVPConfig.enableStrictAuthMode field to select different authentication modes (the default value is false).

  • false: caches the authentication information. If a video is not completely cached, the player sends a URL signing request by using the cached authentication information when you play the uncached video content. If the validity period of the signed URL is short, playback errors occur.

  • true: performs authentication and does not cache video content. URL signing is required for every playback. No network connections lead to playback failures.

Audio preemption causing iOS Player SDK to play abnormally

Problem description: You have integrated ApsaraVideo Player SDK for iOS and other audio players into your project. When you use ApsaraVideo Player SDK to play videos, silence and freezing occur.

Root cause: The iOS audio control AVAudioSession is a singleton. If multiple audio players do not have unified settings, audio preemption issues may occur, preventing normal video playback with ApsaraVideo Player SDK for iOS.

Solution: You can configure AVAudioSession uniformly at an appropriate location in your project. For example, set the audio session of your application to the playback mode and allow audio mixing with other applications. Another example is to set the audio session of your application to the PlayAndRecord category for recording and playback scenarios. If any errors occur during this operation, the error message will be stored in the err variable.

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&err];

Additionally, you can customize the delegate of AVAudioSession on the ApsaraVideo Player SDK for iOS side without using the predefined AVAudioSession logic in the SDK. This helps avoid the risk of audio preemption that might be caused by ApsaraVideo Player SDK for iOS. Sample configurations:

  1. Configure the delegate.

    [AliPlayer setAudioSessionDelegate:self];
  2. Configure listeners for the delegate.

    return TRUE indicates that the SDK will no longer configure AVAudioSession internally.

    #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;
    }

Stack crashes pointing to iOS Player SDK during runtime

If the stack that points to ApsaraVideo Player SDK for iOS crashes, you can use the following methods to resolve the issue:

  1. Update ApsaraVideo Player SDK for iOS to the latest version. The iOS Player SDK continuously releases new versions to optimize and improve stability. To obtain the latest version of the SDK, see SDK introduction.

  2. If the problem persists after you update the SDK to the latest version, we recommend that you provide all the crash information to Alibaba Cloud technical support for troubleshooting. For more information, see Obtain technical support.

Does the iOS player SDK support downloading while playing?

No, it does not. The iOS player SDK supports downloading video files to the local cache by enabling the local cache feature during playback. When you play the video again, it directly plays the cached video file. Currently, it does not support playing the locally cached video files stored in the file folder separately.

Does ApsaraVideo Player SDK for iOS support obtaining video buffering progress?

Yes, it does. ApsaraVideo Player SDK for iOS supports obtaining the buffering speed, real-time rendering frame rate, audio and video bitrate, and network downlink bitrate. For more information, see Obtaining playback information.

Player crashes during playback

You can perform the following steps to troubleshoot the issue:

  1. Check whether the crash occurs on the player SDK.

    Check if there is a crash stack with the AliyunPlayer prefix. If yes, the issue occurs on the player SDK.

  2. Update to the latest version of the player SDK and verify whether the issue is fixed.

  3. If the issue persists, prepare relevant crash files (including all threads), crash logs, crash scenario, and other information. How to obtain problem logs.

Program initialization and preload-related crashes during the running of V5.4.6.0 player SDK

We recommend that you upgrade to V5.4.7.1 or later versions of the player SDK. To maintain the stability of V5.4.6.0 version, you can also use the fixed version pod 5.4.6.0-25587639.

How to implement full-screen playback

ApsaraVideo Player SDK for iOS does not provide APIs for implementing full-screen playback. Full-screen playback must be implemented through the iOS system. The iOS Player SDK Demo has supported full-screen methods for iOS 16.0 and later since version 5.5.0.0.

Sample code:

Note

After you call the method that enables full-screen playback in the iOS system, you must modify the view size of the Aliplayer instance based on the screen size.

UIInterfaceOrientation orientation = UIInterfaceOrientationLandscapeLeft; // Rotate to full screen
......

// The following sample code applies to iOS 16.0 or later
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(@"Rotation error:%@", [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(@"Rotation error:%@", exception.reason);
  } @finally {
  }
} else { // The following sample code applies to iOS versions earlier than 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];
}

Black bars are displayed during video playback

Perform the following steps to troubleshoot the issue:

  1. Check whether the black bars appear on your video source.

  2. Call the following operations to change the scaling mode of the player.

    /*
    AVP_SCALINGMODE_SCALEASPECTFILL: scales the image to fill the view while maintaining the aspect ratio. The image may be cropped as a result.
    AVP_SCALINGMODE_SCALEASPECTFIT: scales the image to fit the view while maintaining the aspect ratio. This leads to black bars in the view.
    AVP_SCALINGMODE_SCALETOFILL: stretches the image to fill the view. This does not preserve the aspect ratio, and may cause the image to be distorted.
    */
    self.player.scalingMode = AVP_SCALINGMODE_SCALETOFILL;
  3. If the scaling mode still cannot meet your requirements, you can adjust the width and height of the custom view of self.player.playerView (by modifying the self.player.playerView's frame).

Audio plays but video does not, and the log shows log[AFVTBDecoder] :IOS8VT: throw frame

Perform the following steps to troubleshoot the issue:

  1. Play the video in another player and check whether the video contains only audio.

  2. If the video can be played in another player and its aspect ratio differs from that of the video source, use the following method to adopt software decoding:

    player.enableHardwareDecoder = NO

RTS live stream stuttering and audio-video synchronization issues on iOS

Solution: Refer to Implement RTS stream pulling on iOS to integrate the latest version of the player's ultra-low-latency component.

Audio plays but video does not when the iOS application enters from the background or starts from a notification.

Solution: Remove 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;
}

When playing a live stream, the log shows a standard error -5,IO error(Input/Output (I/O))

When playing live streams, we recommend that you keep the default values for cache and latency control settings (such as startBufferDuration, highBufferDuration, and maxBufferDuration in AVPConfig) without custom configuration. For more information, see Configure cache and latency control to check whether you have customized the cache and latency control configuration.

After pausing and resuming playback, the log shows audio-related errors such as Deactivating an audio session that has running I/O. or All I/O should be stopped or paused prior to deactivating the audio session.

Problem description: When you pause video playback and navigate to another page with audio, then return, you cannot resume playback. The log shows audio-related errors such as Deactivating an audio session that has running I/O. or All I/O should be stopped or paused prior to deactivating the audio session..

Solution: Check whether a conflict exists in the configurations of AudioSession. For example, the sound track is still occupied when you exit the page on which audio is played. This may be because the audio is not disabled in time.

What do I do if an error occurs when I use AliListPlayer to play HLS (M3U8) videos

Player SDK versions V5.4.5.0 and earlier do not support using AliListPlayer to play HLS (M3U8) videos. Support for playing HLS (M3U8) videos is available starting from version V5.4.5.0, but you need to enable local caching. For information about how to enable local caching, see Local cache.

What do I do if I cannot play videos in background

Problem description: ApsaraVideo Player SDK for iOS cannot play videos in the background after you press the Home button, even if you use the demo.

Solution:

  1. Enable the background data collection feature in Xcode. Example:DuCXfvnsZJMUdeDiGjnX.png

  2. If you have implemented methods to monitor the application's foreground and background states, you need to Comment Out the related pause and start methods.

    // Add an observer to detect when the app enters the background
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationEnterBackground) name: UIApplicationWillResignActiveNotification object:nil];
    // Call this method when the app is switched to the foreground from the background
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name: UIApplicationDidBecomeActiveNotification object:nil];
    
    // Comment out the pause method
    - (void)applicationEnterBackground {
       // [self.player pause];
    }
    // Comment out the start method
    - (void)applicationDidBecomeActive {
       // [self.player start];
    }

Occasional "Redirect to a url" error when playing videos

This error may occur because the video source is being hijacked. We recommend that you enable the HTTPDNS feature of the player to address this issue. For more information, see Configure HTTPDNS on iOS.

Error unsupported protocol when playing ARTC streams

Cause 1: The player SDK is integrated, but the "bridge layer between the player and the Real-Time Streaming (RTS) component (AlivcArtc)" and the "RTS component (RtsSDK)" are not integrated.

Solution: For integration, see Implement RTS stream pulling on iOS.

Cause 2: The version of the "bridge layer between the player and the Real-Time Streaming (RTS) component (AlivcArtc)" does not match the version of the "player".

Solution: The "bridge layer between the player and the Real-Time Streaming (RTS) component (AlivcArtc)" and the "player" must use the same version number. For implementation details, see the Implement RTS stream pulling on iOS document.

Which resolution is used for video playback if a video is transcoded to multiple resolutions?

Default resolution playback order: FD, LD, SD, HD, 2K, 4K, OD. For the definition of resolutions, see Resolution: Definition. ApsaraVideo Player SDK searches for available resolutions from left to right and plays the first resolution that it finds.

How do I configure a default resolution for video playback?

The following sample code provides an example:

//Take VidSts playback as an example.
AVPVidStsSource *stsSource = [[AVPVidStsSource alloc] init];
stsSource.vid = @"<vid>";
stsSource.accessKeyId = @"<accessKeyId>";
stsSource.securityToken = @"<securityToken>";
stsSource.accessKeySecret = @"<accessKeySecret>";
stsSource.quality = @""; // The resolution in which you want to play videos. Valid values: FD, LD, SD, HD, 2K, 4K, and OD.
stsSource.forceQuality = NO; // Specifies whether to forcibly use the specified resolution to play videos. NO: The specified resolution is not forcibly used. The SDK searches for available resolutions based on the default resolution playback order. YES: The specified resolution is forcibly used. If the specified resolution is not found, the video cannot be played.

Which stream is played when multiple streams in the same resolution are available?

In this case, ApsaraVideo Player SDK plays the latest transcoded stream.

How do I configure a watermark to be displayed on the downloaded video but hidden during video playback?

You can create transcoding jobs to transcode the video into multiple resolutions. Configure watermarking for the video in one resolution and use this resolution for video playback. Use other resolutions for video download.

Landscape mode not working

The iOS player SDK itself does not provide a method to implement landscape mode. You need to implement it using iOS system APIs. When implementing landscape mode, make sure to properly set the aliplayer.playerView frame.

How to obtain error logs

When you contact Alibaba Cloud technical support, provide your error logs to help resolve your issues more efficiently. Perform the following steps to obtain error logs:

  1. Obtain error logs.

    We recommend that you set the log level to LOG_LEVEL_TRACE before you obtain error logs. For more information, see Obtain SDK logs.

  2. Provide the generated logs to Alibaba Cloud technical support.

    For more information, see Obtain technical support.