This topic describes how to create a player instance and use basic features of ApsaraVideo Player SDK for Android, such as setting the volume, performing video seeking, monitoring playback status, enabling loop playback, configuring the playback speed, and switching audio tracks.
Create a player
This section describes how to use ApsaraVideo Player SDK for Android to play videos. Manual playback and autoplay are supported.
Create a player.
Call the
AliPlayerFactory
class to create an AliPlayer object.NoteApsaraVideo VOD supports the playback quality monitoring, single-point tracing, and statistical analysis features based on the event tracking logs. You can use the playback quality monitoring feature to query statistics about overall playback quality and use the single-point tracing feature to locate the specific user or device, analyze the playback behavior, and identify the error in an efficient manner. For more information, see Playback quality monitoring, Single-point tracing, and Statistical analysis.
You can configure the
setTraceId
parameter to use the features. The following content describes the configurations:If you leave the
setTraceId
parameter empty, the event tracking logs are automatically uploaded. You can use only the playback quality monitoring and statistical analysis features. By default, this parameter is left empty.If you specify the unique identifier of the device or the user for the
setTraceId
parameter, the event tracking logs are automatically uploaded. You can use the playback quality monitoring, single-point tracing, and statistical analysis features. For example, you can specify the user ID or device ID such as the International Mobile Equipment Identity (IMEI) or the Identifier for Advertisers (IDFA) for this parameter.If you specify
DisableAnalytics
for thesetTraceId
parameter, the event tracking logs are not uploaded. You cannot use the playback quality monitoring, single-point tracing, or statistical analysis feature.
// Create a player. AliPlayer aliPlayer = AliPlayerFactory.createAliPlayer(context); // We recommend that you specify the traceId parameter. aliPlayer.setTraceId("traceId");
NoteThe event tracking logs are uploaded to the points of presence (POPs) in the China (Shanghai) region. POPs in the Singapore region will be supported in the future.
Configure listeners.
You can configure multiple listeners for your player.
You must configure
OnPreparedListener
. This way, you can callaliPlayer.start()
in theOnPreparedListener
callback to start manual playback.We recommend that you configure
OnErrorListener
,OnCompletionListener
,OnLoadingStatusListener
, andOnInfoListener
.
aliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() { // If an error occurs when you use the player, this callback is returned. @Override public void onError(ErrorInfo errorInfo) { ErrorCode errorCode = errorInfo.getCode() // The error code. String errorMsg =errorInfo.getMsg(); // The error message. // errorExtra indicates the supplementary error message. The value is a JSON string. The following sample code shows the structure of the errorExtra parameter. The value of the ModuleCode field is not the same as the value of the errorCode parameter. //{ "Url": "xxx", // "Module": "NetWork", // "ModuleCode": "-377", // "ModuleMessage": "Redirect to a url that is not a media"} String errorExtra= errorInfo.getExtra(); // Stop the player if an error occurs. aliPlayer.stop(); } }); aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() { // The player starts to read and parse data after you call the aliPlayer.prepare() method. This callback is returned after data is parsed. @Override public void onPrepared() { // Call the start method to start the playback. aliPlayer.start(); } }); aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() { // This callback is returned after the playback ends. @Override public void onCompletion() { // Call the stop method to stop the playback. aliPlayer.stop(); } }); aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() { // The information about the player, such as the current playback progress and buffer position. @Override public void onInfo(InfoBean infoBean) { InfoCode code = infoBean.getCode(); // The information code. String msg = infoBean.getExtraMsg(); // The information content. long value = infoBean.getExtraValue(); // The information value. // Current progress: InfoCode.CurrentPosition // Current buffer position: InfoCode.BufferedPosition } }); aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() { // The loading status. If the network is unstable, this method is called to display the loading status. @Override public void onLoadingBegin() { // Starts loading. In this case, you cannot play video and audio streams. // The loading circle is displayed. } @Override public void onLoadingProgress(int percent, float netSpeed) { // Listen to the loading progress. The loading percentage and network speed are displayed. } @Override public void onLoadingEnd() { // Listen to the end of loading. In this case, you can play video and audio streams. // The loading circle is hidden. } });
Configure a playback source.
ApsaraVideo Player SDK for Android supports video-on-demand (VOD) playback based on UrlSource, VidAuth, and VidSts. Encrypted VOD playback is also supported. We recommend that you play videos based on VidAuth in ApsaraVideo VOD.
ApsaraVideo Player SDK for Android supports UrlSource-based and encrypted live streaming.
NoteUrlSource is used for URL-based playback, and VidSts and VidAuth are used for Vid-based playback.
For more information about regions, see Region IDs of ApsaraVideo VOD.
VOD playback
UrlSource-based playback
If you play an on-demand video based on UrlSource, you must set the setUrl parameter to the playback URL of the video.
You can call the GetPlayInfo operation to obtain playback URLs in ApsaraVideo VOD. We recommend that you integrate ApsaraVideo VOD SDKs to obtain media playback URLs in ApsaraVideo VOD. This frees you from complex signature calculations. For more information about the GetPlayInfo operation, visit OpenAPI Explorer.
Make sure that you are authorized to call API operations to obtain the full path of the local file if you want to play a local video. Example:
/sdcard/xxx/xxx/xxx.mp4
orcontent://xxx/xxx/xx.mp4
.
UrlSource urlSource = new UrlSource(); urlSource.setUri("Playback URL");// Required. The playback URL of the video. The URL can be generated by ApsaraVideo VOD or a third-party service. You can also use the URL of a local video. aliPlayer.setDataSource(urlSource);
(Recommended) VidAuth-based playback
If you play an on-demand video based on VidAuth, you must set the vid parameter to the ID of the media file and set the playauth parameter to the playback credential.
After you upload an audio or video file, you can log on to the ApsaraVideo VOD console and choose Media Files > Audio/Video to view the ID of the audio or video file. Alternatively, you can call the SearchMedia operation provided by the ApsaraVideo VOD SDK to obtain the ID.
You can call the GetVideoPlayAuth operation to obtain the playback credential. We recommend that you integrate ApsaraVideo VOD SDKs to obtain credentials for media playback in ApsaraVideo VOD. This frees you from complex signature calculations. For more information about the GetVideoPlayAuth operation, visit OpenAPI Explorer.
We recommend that you use VidAuth for video playback in ApsaraVideo VOD. Compared with STS-based playback, VidAuth-based playback is easier to use and more secure. For more information about the differences between the two playback methods, see Comparison between credentials and STS.
VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Vid");// Required. The video ID. vidAuth.setPlayAuth("yourPlayAuth"); // Required. The playback credential. To obtain the playback credential, call the GetVideoPlayAuth operation in ApsaraVideo VOD. vidAuth.setRegion("Access region"); // This parameter is deprecated in ApsaraVideo Player SDK V5.5.5.0 or later. If you use ApsaraVideo Player SDK V5.5.5.0 or later, the player automatically parses the region information. If you use ApsaraVideo Player SDK V5.5.5.0 or earlier, this parameter is required. Specify the ID of the region in which ApsaraVideo VOD is activated for this parameter. Default value: cn-shanghai. // vidAuth.setAuthTimeout(3600);// The validity period of the playback URL. Unit: seconds. Default value: 3600. This setting overwrites the validity period that you configured in the ApsaraVideo VOD console. If you leave this parameter empty, the default value 3600 is used. The validity period must be longer than the actual duration of the video. Otherwise, the playback URL expires before the playback is complete. aliPlayer.setDataSource(vidAuth);
VidSts-based playback
If you play an on-demand video based on VidSts, a temporary STS token is used instead of a playback credential. In this case, you must obtain an STS token and AccessKey pair (AccessKey ID and AccessKey secret) before you play videos on demand. For more information about how to obtain an STS token, see Create a RAM role and grant temporary access permissions to the role by using STS.
VidSts vidSts = new VidSts(); vidSts.setVid("Vid"); // Required. The video ID. vidSts.setAccessKeyId("<yourAccessKeyId>"); // Required. The AccessKey ID that is issued together with the STS token. To generate the AccessKey ID, call the AssumeRole operation in STS. vidSts.setAccessKeySecret("<yourAccessKeySecret>");// Required. The AccessKey secret that is issued together with the STS token. To generate the AccessKey secret, call the AssumeRole operation in STS. vidSts.setSecurityToken("<yourSecurityToken>");// Required. The STS token. To generate an STS token, call the AssumeRole operation in STS. vidSts.setRegion("Access region"); // Required. The ID of the region in which ApsaraVideo VOD is activated. Default value: cn-shanghai. // vidSts.setAuthTimeout(3600);// The validity period of the playback URL. Unit: seconds. Default value: 3600. This setting overwrites the validity period that you configured in the ApsaraVideo VOD console. If you leave this parameter empty, the default value 3600 is used. The validity period must be longer than the actual duration of the video. Otherwise, the playback URL expires before the playback is complete. aliPlayer.setDataSource(vidSts);
Encrypted playback
ApsaraVideo VOD supports HTTP-Live-Streaming (HLS) encryption, Alibaba Cloud proprietary cryptography, and digital rights management (DRM) encryption. For more information, see Play an encrypted video.
Live streaming
UrlSource-based live streaming
If you play a live stream based on UrlSource, you must set the setUrl parameter to the streaming URL of the video. The streaming URL is generated by ApsaraVideo Live or a third-party service.
You can generate a streaming URL for a live stream by using the URL generator in the ApsaraVideo Live console. For more information, see URL generator.
UrlSource urlSource = new UrlSource(); urlSource.setUri("Streaming URL");// The streaming URL. The URL is generated by ApsaraVideo Live or a third-party service. aliPlayer.setDataSource(urlSource);
DRM-encrypted live streaming
For more information about DRM-encrypted live streaming, see Use ApsaraVideo Player SDK for Web.
Configure the view.
You can call the SurfaceView or TextureView method to configure the view.
The following sample code provides an example on how to use SurfaceView to configure the view:
SurfaceView surfaceView = findViewById(R.id.surface_view); surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { aliPlayer.setSurface(holder.getSurface()); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { aliPlayer.surfaceChanged(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { aliPlayer.setSurface(null); } });
The following sample code provides an example on how to use TextureView to configure the view:
TextureView textureView = findViewById(R.id.texture_view); textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { aliPlayer.setSurface(new Surface(surface)); } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { aliPlayer.surfaceChanged(); } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { aliPlayer.setSurface(null); return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { } });
Optional. Enable the autoplay feature. By default, the autoplay feature is disabled.
aliPlayer.setAutoPlay(true);
Prepare the player.
Call the
aliPlayer.prepare()
method to read and parse data.aliPlayer.prepare();
Start the playback.
If the autoplay feature is not enabled, you must call the
aliPlayer.start()
method after theOnPrepared
callback is fired to start the playback.If the autoplay feature is enabled, you do not need to call the
aliPlayer.start()
method. After the data is parsed, the video is automatically played.
aliPlayer.start();// After the playback starts, you can call the pause() method to pause the playback.
Manage playback
ApsaraVideo Player SDK for Android allows you to manage media playback. For example, you can start, pause, or stop the playback, or start the playback from a specific point in time.
Start the playback
You can call the start
method to start the playback. Sample code:
aliyunVodPlayer.start();
Play a video from a specified point in time
You can call the seekTo
method to play a video from a specified point in time. This feature is used when the user drags the slider on the progress bar or when the video is resumed from a specific point in time. Sample code:
// The position parameter specifies the point in time when playback starts. Unit: milliseconds.
aliyunVodPlayer.seekTo(long position);
Pause the playback
You can call the pause
method to pause the playback. Sample code:
aliyunVodPlayer.pause();
Stop the playback
You can call the stop
method to stop the playback. Sample code:
aliyunVodPlayer.stop();
Set the video display mode
ApsaraVideo Player SDK for Android allows you to configure display settings for playback. For example, you can specify how video images are scaled, rotated, or mirrored.
Scaling
You can call setScaleMode
to scale in or scale out a video without changing the original aspect ratio, or stretch a video. Sample code:
// Scale in the video to fit the view. The aspect ratio of the video is maintained.
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// Scale out the video to fill the view. The aspect ratio of the video is maintained.
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// Stretch the video to fill the view. The aspect ratio of the video is not maintained. If the aspect ratios of the video and the view are different, image distortion may occur.
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);
Rotating
You can call setRotateMode
to specify a rotation angle for video images. You can query the rotation angle after it is set. Sample code:
// Set the rotation angle to 0° in the clockwise direction.
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_0);
// Set the rotation angle to 90° in the clockwise direction.
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_90);
// Set the rotation angle to 180° in the clockwise direction.
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_180);
// Set the rotation angle to 270° in the clockwise direction.
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_270);
// Query the rotation angle.
aliyunVodPlayer.getRotateMode();
Mirroring
You can call setMirrorMode
to specify a mirroring mode. Horizontal mirroring, vertical mirroring, and no mirroring are supported. Sample code:
// Specify no mirroring for the video images.
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// Specify horizontal mirroring for the video images.
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// Specify vertical mirroring for the video images.
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);
Obtain the playback information
ApsaraVideo Player SDK for Android allows you to obtain playback information, such as the current playback progress, playback duration, and buffering progress.
Obtain the playback progress
You can call getExtraValue
in the onInfo callback to obtain the current playback position. Sample code:
mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentPosition){
// The extraValue parameter indicates the current playback position. Unit: milliseconds.
long extraValue = infoBean.getExtraValue();
}
}
});
Obtain the playback duration
You can query the total duration of a video. The video duration can be obtained only after the video is loaded. You can call getDuration
after the onPrepared event is invoked to query the video duration. Sample code:
long duration = mAliPlayer.getDuration();
Obtain the buffer position
You can call getExtraValue
in the onInfo callback to query the current buffering progress. Sample code:
mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.BufferedPosition){
// The extraValue parameter indicates the buffering progress. Unit: milliseconds.
long extraValue = infoBean.getExtraValue();
}
}
});
Obtain the rendering frame rate, audio and video bitrate, and network downlink bitrate in real time
Sample code:
// Obtain the current frame rate for video rendering. The returned data is of the FLOAT data type.
mAliPlayer.getOption(IPlayer.Option.RenderFPS);
// Obtain the current video bitrate. The returned data is of the FLOAT data type. Unit: bit/s.
mAliPlayer.getOption(IPlayer.Option.VideoBitrate);
// Obtain the current audio bitrate. The returned data is of the FLOAT data type. Unit: bit/s.
mAliPlayer.getOption(IPlayer.Option.AudioBitrate);
// Obtain the current network downlink bitrate. The returned data is of the FLOAT data type. Unit: bit/s.
mAliPlayer.getOption(IPlayer.Option.DownloadBitrate);
Obtain the player status
You can listen to the player status in the onStateChanged callback. Sample code:
mAliPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
@Override
public void onStateChanged(int newState) {
/*
int idle = 0;
int initalized = 1;
int prepared = 2;
int started = 3;
int paused = 4;
int stopped = 5;
int completion = 6;
int error = 7;
*/
}
});
Callback for audio and video out of sync
You can specify to fire a callback when audio and video are out of sync. Out of sync occurs when decoding is slower than playback in extreme cases such as software decoding 4K videos and high-speed playback of HD H.265 videos on low-end devices. Sample code:
mAliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
@Override
public void onAVNotSyncStart(int type) {
if (type == 0) {
// Set a lower playback speed.
if (player.getSpeed() > 1) {
player.setSpeed(1);
}
}
Toast.makeText(getContext(), "Out-of-sync starts" , Toast.LENGTH_SHORT).show();
}
@Override
public void onAVNotSyncEnd() {
Toast.makeText(getContext(), "Out-of-sync ends" , Toast.LENGTH_SHORT).show();
}
});
Specify the volume
You can set the mute mode and the volume.
Change the volume
You can change the volume of a video to up to twice the original volume. However, noise may occur if you set the volume to a value higher than 1. Call setVolume
to change the volume. You can also obtain the current volume. Sample code:
// Set the volume to a real number from 0 to 2.
aliyunVodPlayer.setVolume(1f);
// Obtain the volume.
aliyunVodPlayer.getVolume();
Mute the player
Call setMute
to mute a video that is being played. Sample code:
aliyunVodPlayer.setMute(true);
Configure the playback speed
ApsaraVideo Player SDK for Android allows you to call setSpeed
to change the playback speed. Playback speeds ranging from 0.5x to 5x are supported. The audio pitch remains unchanged at different speeds. Sample code:
// Playback speeds ranging from 0.5x to 5x are supported. Common playback speeds are multiples of 0.5x, such as 0.5x, 1x, and 1.5x.
aliyunVodPlayer.setSpeed(1.0f);
Configure multi-definition playback
Configure UrlSource-based live streaming
You can play live streams based on URLs in ApsaraVideo Live or URLs of the transcoded live streams. Default transcoding and custom transcoding are supported. For more information about how to transcode live streams, see Transcoding management. For more information about how to obtain streaming URLs, see Ingest and streaming URLs.
You can switch between live streams in different definitions. Only Real-Time Messaging Protocol (RTMP) and Flash Video (FLV) streams are supported.
You must set the group of pictures (GOP) size to 2 seconds and the timestamp to the time when the source video is pushed.
If you change the streaming URL to a URL that does not meet the preceding requirements, the switching fails.
Switch between definitions
Call the switchStream
method to switch between live streams in different definitions. Specify the URL of the live stream that you want to play.
mAliPlayer.switchStream(newUrl);
Set the callbacks for definition switching
Set the callbacks for the successful and failed definition switching.
mAliPlayer.setOnStreamSwitchedListener(new IPlayer.OnStreamSwitchedListener() {
@Override
public void onSwitchedSuccess(String url) {
Log.i("SwitchStream", "switch success, url = " + url);
}
@Override
public void onSwitchedFail(String url, ErrorInfo errorInfo) {
Log.i("SwitchStream", "switch failed, url = " + url + ", error=" + errorInfo.getMsg());
}
});
Configure VidAuth or VidSts-based playback
If you use VidAuth or VidSts to play on-demand videos, no additional settings are required. ApsaraVideo Player SDK for Android automatically obtains video definitions from ApsaraVideo VOD.
Obtain video definitions
After the video is loaded, you can obtain the definitions of the video.
// Obtain information about all streams of the video.
List<TrackInfo> trackInfos = mAliPlayer.getMediaInfo().getTrackInfos();
// Traverse all streams to obtain the video definitions.
for (TrackInfo trackInfo : trackInfos) {
if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
// Obtain the video definition.
String vodDefinition = trackInfo.getVodDefinition();
}
}
Switch between definitions
You can call selectTrack
and specify the index that corresponds to the definition to which you want to switch. You can obtain the index from the TrackInfo parameter.
mAliPlayer.selectTrack(index);
Set the callbacks for definition switching
Configure the callbacks for the successful and failed definition switching.
mAliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) { }
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { }
});
Quick switching
After you enable the quick switching mode, you can call selectTrack
to quickly switch tracks.
playerConfig.mSelectTrackBufferMode = 1;
mAliPlayer.setConfig(playerConfig)
Enable loop playback
ApsaraVideo Player SDK for Android supports loop playback. Call setLoop
to enable loop playback. The loop playback feature allows you to play a video again from the beginning after the video playback ends. Sample code:
aliyunVodPlayer.setLoop(true);
The onInfo
callback is returned when loop playback starts. Sample code:
aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if (infoBean.getCode() == InfoCode.LoopingStart){
// Listen to the start of loop playback.
}
}
});
Switch audio tracks
ApsaraVideo Player SDK for Android supports audio track switching. This allows you to switch audio tracks in different languages during video playback.
Usage notes
You can switch audio tracks in streams that are not used for list playback such as MP4 streams, single-bitrate mixed HLS streams, audio tracks in single-bitrate HLS streams, and substreams in multi-bitrate mixed HLS streams. The following table describes different types of video streams.
Type | Video stream suffix | Bitrate quantity | M3U8 file quantity | Substream type | Description |
Non-list stream (such as MP4 stream) | .mp4 | 1 | - | A stream that contains a video track, multiple audio tracks, and multiple subtitle tracks. | You can switch between audio tracks. |
Single-bitrate mixed HLS stream | .m3u8 | 1 | 1 | A stream that contains a video track, multiple audio tracks, and multiple subtitle tracks. | You can switch between audio tracks. |
Single-bitrate HLS stream | .m3u8 | 1 | n | An M3U8 stream that contains only video tracks, audio tracks, or subtitle tracks. | You can switch between audio tracks. |
Multi-bitrate mixed HLS stream | .m3u8 | n | n | An M3U8 stream that contains a video track, multiple audio tracks, and multiple subtitle tracks. The bitrate of the substreams are different. | You can switch between different substreams. You cannot switch between the audio tracks of a substream. |
Example
Configure callbacks.
mAliyunVodPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() { @Override // Configure the onSubTrackReady callback. In most cases, the onSubTrackReady callback is fired before the prepare callback. public void onSubTrackReady(MediaInfo mediaInfo) { if (mPlayerTrackFragment != null) { //mPlayerTrackFragment.showMediaInfo(); // Call the getSubMediaInfo operation and obtain MediaInfo from the response. You must call the getSubMediaInfo operation after the onSubTrackReady callback is fired. Otherwise, an empty string is returned. MediaInfo subMediaInfo = mAliyunVodPlayer.getSubMediaInfo(); TrackInfos = subMediaInfo.getTrackInfos(); // Find the track to which you want to switch. myTrack = myfunc(TrackInfos) } } });
Switch to the desired track.
index = myTrack.getIndex(); mAliyunVodPlayer.selectTrack(index);
Obtain SDK logs
SDK logs are generated when you use ApsaraVideo Player SDK. The logs contain detailed information such as request status, invocation results, and permission application results. You can debug code and troubleshoot problems by viewing the SDK logs to facilitate development. You can use one of the following methods to obtain SDK logs.
Method 1: Use the console of your development tool
This method captures logs on your local device. It is suitable for scenarios where you can reliably reproduce the error on your device.
Enable the logging feature and set the log level.
// The logs are stored under com.cicada.player.utils. // Enable the logging feature. Logger.getInstance(context).enableConsoleLog(true); // Set the log level. Default value: AF_LOG_LEVEL_INFO. To troubleshoot problems, set this parameter to AF_LOG_LEVEL_TRACE. Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
Collect logs.
Reproduce the error and obtain the error log in the console of your development tool such as Logcat.
Method 2: Set LogCallback to receive ApsaraVideo Player SDK logs
This method uses the LogCallback method. It is suitable for scenarios where the error occurs on the client side but you cannot reliably reproduce the error and capture logs on your device. You can call LogCallback to listen to the log export of ApsaraVideo Player SDK and automatically export error logs to the log channel of your application.
Enable the logging feature and set the log level.
// The logs are stored under com.cicada.player.utils. // Set the log level. Default value: AF_LOG_LEVEL_INFO. To troubleshoot problems, set this parameter to AF_LOG_LEVEL_TRACE. Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO); Logger.getInstance(mContext).setLogCallback(newLogger.OnLogCallback(){ @Override public void onLog(Logger.LogLevel logLevel,Strings){ // The logs. } });
Collect logs.
After an error occurs, the system automatically exports the error log to the log channel of your application.
References
For more information about API operations, see API references.
For more information about advanced features, see Advanced features.
For more information about common playback errors and corresponding solutions, see Troubleshoot playback errors, FAQ about ApsaraVideo Player SDK for Android, and Error codes.