日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基礎(chǔ)功能

本文提供iOS播放器基礎(chǔ)功能的使用示例,更多功能使用說明請參見進階功能、API說明。

創(chuàng)建播放器

本節(jié)介紹如何用最簡單的方式讓iOS端播放器SDK播放視頻,按照播放方式的不同可以分為手動播放和自動播放。

說明

5.4.7.1及之后版本的iOS端播放器SDK,在配置License后,需要在播放器實例初始化前主動調(diào)用初始化證書服務(wù)。代碼示例如下:

[AliPrivateService initLicenseService];
  1. 創(chuàng)建播放器。

    創(chuàng)建AliPlayer播放器。

    說明

    播放器提供的播放質(zhì)量監(jiān)控(可查看播放器整體播放質(zhì)量相關(guān)數(shù)據(jù))、單點追查(可定位到具體的用戶或設(shè)備,分析其播放行為,快速定位播放異常等問題)及視頻播放統(tǒng)計功能都依賴埋點日志上報功能而實現(xiàn)。

    在創(chuàng)建播放器時,根據(jù)setTraceId參數(shù)的設(shè)置不同,其后續(xù)可實現(xiàn)的功能不同,具體如下:

    • setTraceId參數(shù)不傳(默認(rèn)):埋點日志上報功能開啟,后續(xù)可以使用播放質(zhì)量監(jiān)控和視頻播放統(tǒng)計功能,無法使用單點追查功能。

    • setTraceId參數(shù)傳入traceid:traceid的值由您自行定義,需為您的用戶或用戶設(shè)備的唯一標(biāo)識符,例如傳入您業(yè)務(wù)的userid或者IMEI、IDFA等您業(yè)務(wù)用戶的設(shè)備ID。傳入traceid后,埋點日志上報功能開啟,后續(xù)可以使用播放質(zhì)量監(jiān)控、單點追查和視頻播放統(tǒng)計功能。

    • setTraceId參數(shù)設(shè)置為DisableAnalytics:關(guān)閉埋點日志上報,后續(xù)無法使用播放質(zhì)量監(jiān)控、單點追查和視頻播放統(tǒng)計功能。

    // 創(chuàng)建播放器
    self.player = [[AliPlayer alloc] init];
    // 建議傳入traceId
    [play setTraceID:@"xxxxxx"];
  2. 設(shè)置監(jiān)聽器。

    播放器支持設(shè)置多個監(jiān)聽器。

    • prepare必須設(shè)置,因為手動播放需要在prepare回調(diào)中調(diào)用start開始播放。

    • onPlayerEventonError較為重要,建議您設(shè)置。

    @interface SimplePlayerViewController ()<AVPDelegate>
    @end
    - (void)viewDidLoad {
        self.player = [[AliPlayer alloc] init];
        self.player.playerView = self.avpPlayerView.playerView;
        self.player.delegate = self;
        //...
    }
    /**
     @brief 錯誤代理回調(diào)
     @param player 播放器player指針
     @param errorModel 播放器錯誤描述,參考AliVcPlayerErrorModel
     */
    - (void)onError:(AliPlayer*)player errorModel:(AVPErrorModel *)errorModel {
        // 提示錯誤,及stop播放
    }
    /**
     @brief 播放器事件回調(diào)
     @param player 播放器player指針
     @param eventType 播放器事件類型,@see AVPEventType
     */
    -(void)onPlayerEvent:(AliPlayer*)playereventType:(AVPEventType)eventType{
        switch(eventType){
            caseAVPEventPrepareDone:{
                // 準(zhǔn)備完成
                // 在player設(shè)置autoPlay為NO時,建議在準(zhǔn)備完成回調(diào)中手動調(diào)用start。
                [self.playerstart];
            }
                break;
            case AVPEventAutoPlayStart:
                // 自動播放開始事件
                break;
            case AVPEventFirstRenderedStart:
                // 首幀顯示
                break;
            case AVPEventCompletion:
                // 播放完成
                break;
            case AVPEventLoadingStart:
                // 緩沖開始
                break;
            case AVPEventLoadingEnd:
                // 緩沖完成
                break;
            case AVPEventSeekEnd:
                // 跳轉(zhuǎn)完成
                break;
            case AVPEventLoopingStart:
                // 循環(huán)播放開始
                break;
            default:
                break;
        }
    }
    /**
     @brief 視頻當(dāng)前播放位置回調(diào)
     @param player 播放器player指針
     @param position 視頻當(dāng)前播放位置
     */
    - (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
        // 更新進度條
    }
    /**
     @brief 視頻緩存位置回調(diào)
     @param player 播放器player指針
     @param position 視頻當(dāng)前緩存位置
     */
    - (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
        // 更新緩沖進度
    }
    /**
     @brief 獲取track信息回調(diào)
     @param player 播放器player指針
     @param info track流信息數(shù)組參考AVPTrackInfo
     */
    - (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
        // 獲取多碼率信息
    }
    /**
     @brief 字幕顯示回調(diào)
     @param player 播放器player指針
     @param index 字幕顯示的索引號
     @param subtitle 字幕顯示的字符串
     */
    - (void)onSubtitleShow:(AliPlayer*)player index:(int)index subtitle:(NSString *)subtitle {
        // 獲取字幕進行顯示
    }
    /**
     @brief 字幕隱藏回調(diào)
     @param player 播放器player指針
     @param index 字幕顯示的索引號
     */
    - (void)onSubtitleHide:(AliPlayer*)player index:(int)index {
        // 隱藏字幕
    }
    /**
     @brief 獲取截圖回調(diào)
     @param player 播放器player指針
     @param image 圖像
     */
    - (void)onCaptureScreen:(AliPlayer *)player image:(UIImage *)image {
        // 預(yù)覽,保存截圖
    }
    /**
     @brief track切換完成回調(diào)
     @param player 播放器player指針
     @param info 切換后的信息參考AVPTrackInfo
     */
    - (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
        // 切換碼率結(jié)果通知
    }
  3. 創(chuàng)建DataSource。

    • iOS播放器SDK支持4種點播播放方式,包括:UrlSource播放、VidAuth播放(視頻點播用戶推薦使用)、VidSts播放、加密播放。

    • iOS播放器SDK支持2種直播播放方式,UrlSource播放和加密播放。

    說明
    • UrlSource是直接通過URL播放,VidSts,VidAuth是通過Vid進行播放。

    • 接入地域Region的設(shè)置,請參見點播地域標(biāo)識

    點播視頻播放

    點播UrlSource播放

    使用UrlSource播放方式播放點播視頻,需要將播放器的source屬性設(shè)置為播放地址。

    • 阿里云視頻點播服務(wù)中的播放地址:可以調(diào)用GetPlayInfo接口獲取。建議您集成點播服務(wù)端SDK來獲取音視頻播放地址,免去自簽名的麻煩。調(diào)用接口獲取音視頻播放地址的示例請參見開發(fā)者門戶

    • 本地視頻地址:請確保有訪問權(quán)限,可以通過系統(tǒng)API獲取到可訪問的本地視頻文件完整路徑,例如:/sdcard/xxx/xxx/xxx.mp4content://xxx/xxx/xx.mp4

    AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // 必選參數(shù),播放地址,可以是第三方點播地址,或阿里云點播服務(wù)中的播放地址,也可以是本地視頻地址。
    [self.player setUrlSource:urlSource]; 

    點播VidAuth播放(推薦)

    使用VidAuth播放方式播放點播視頻,需要將播放器的vid屬性設(shè)置為音視頻ID,將playauth屬性設(shè)置為音視頻播放憑證。

    • 音視頻ID:可以在音視頻上傳完成后通過控制臺(路徑:媒資庫>音/視頻)或服務(wù)端接口(SearchMedia)獲取。

    • 音視頻播放憑證:可以調(diào)用GetVideoPlayAuth接口獲取。建議您集成點播服務(wù)端SDK來獲取音視頻播放憑證,免去自簽名的麻煩。調(diào)用接口獲取音視頻播放憑證的示例請參見開發(fā)者門戶

    推薦視頻點播用戶采用此播放方式。相比STS播放方式,PlayAuth播放方式在易用性和安全性上更有優(yōu)勢,對比詳情請參見憑證方式與STS方式對比

    AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init];
    authSource.vid = @"Vid信息"; // 必選參數(shù),視頻ID(VideoId)。
    authSource.playAuth = @"<yourPlayAuth>"; // 必選參數(shù),播放憑證,需要調(diào)用點播服務(wù)的GetVideoPlayAuth接口生成。
    authSource.region = @"接入地域"; // 5.5.5.0及之后版本播放器SDK,本參數(shù)已棄用,無需設(shè)置region,播放器會自動解析region;5.5.5.0之前版本播放器SDK,本參數(shù)必選,點播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    // authSource.authTimeout = 3600; // 播放地址的有效時長,單位:秒。該時長會覆蓋在視頻點播控制臺設(shè)置的URL鑒權(quán)的有效時長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請確保該時間大于視頻的實際時長,防止播放地址在播放完成前過期。
    [self.player setAuthSource:authSource];

    點播VidSts播放

    使用點播VidSts播放方式播放點播視頻是指用STS臨時憑證而非點播音視頻播放憑證播放。STS安全令牌和STS臨時AK對(AccessKeyId和AccessKeySecret)需要提前獲取,獲取方式請參見使用STS臨時授權(quán)方案上傳視頻

    AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
    source.vid = @"Vid信息"; // 必選參數(shù),視頻ID(VideoId)。
    source.region = @"接入地域"; // 必選參數(shù),點播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    source.securityToken = @"<yourSecurityToken>"; // 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    source.accessKeySecret = @"<yourAccessKeySecret>"; // 必選參數(shù),STS臨時AK對的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    source.accessKeyId = @"<yourAccessKeyId>"; // 必選參數(shù),STS臨時AK對的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    // source.authTimeout = 3600; // 播放地址的有效時長,單位:秒。該時長會覆蓋在視頻點播控制臺設(shè)置的URL鑒權(quán)的有效時長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請確保該時間大于視頻的實際時長,防止播放地址在播放完成前過期。
    // 設(shè)置播放源
    [self.player setStsSource:source]

    點播加密播放

    點播視頻支持HLS標(biāo)準(zhǔn)加密、阿里云私有加密和DRM加密。加密播放請參見如何播放加密視頻

    直播視頻播放

    直播UrlSource播放

    使用URL播放方式播放直播視頻,需要將播放器的source屬性設(shè)置為直播拉流地址。播放地址可以是第三方直播地址或阿里云直播服務(wù)中的拉流地址。

    阿里云直播拉流地址可以通過直播控制臺的地址生成器生成。詳情請參見直播地址生成器

    AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // 必選參數(shù),播放地址,可以是第三方直播地址,或阿里云直播服務(wù)中的拉流地址。
    [self.player setUrlSource:urlSource];

    直播DRM加密播放

    直播DRM加密播放請參見播放DRM加密視頻-Web端

  4. 設(shè)置顯示View。

    如果播放源有畫面,那么需要設(shè)置顯示的view到播放器中,用來顯示畫面。示例如下:

    self.player.playerView = self.avpPlayerView.playerView;// 用戶顯示的view
  5. 可選:開啟自動播放,默認(rèn)為關(guān)閉狀態(tài)。

    self.player.autoPlay = YES;
  6. 準(zhǔn)備播放。

    調(diào)用[self.player prepare]開始讀取并解析數(shù)據(jù)。

    [self.player prepare];
  7. 開始播放。

    • 如果未開啟自動播放,需要在AVPEventPrepareDone回調(diào)發(fā)生之后,擇機調(diào)用start開始播放視頻。

    • 如果開啟了自動播放,則不需要調(diào)用start,數(shù)據(jù)解析完成后將開始自動播放視頻。

    重要

    自動播放的時候?qū)⒉粫卣{(diào)AVPEventPrepareDone回調(diào),而會回調(diào)AVPEventAutoPlayStart回調(diào)。

    [self.player start];

控制播放

iOS端播放器SDK支持開始、暫停、從指定時間點播放等主流操作。

開始播放

開始播放視頻,由start接口實現(xiàn)。示例如下:

 [self.player start];

從指定時間開始播放

跳轉(zhuǎn)到某個時刻進行播放,由seekToTime接口實現(xiàn)。適用于用戶拖拽進度條,或續(xù)播等需要從指定時間點開始播放的場景。示例如下:

// position為指定的時間。單位:毫秒。seekMode可設(shè)置為精準(zhǔn)模式和非精準(zhǔn)模式。
// 精準(zhǔn)seek
[self.player seekToTime:position seekMode:AVP_SEEKMODE_ACCURATE];
// 非精準(zhǔn)seek
[self.player seekToTime:position seekMode:AVP_SEEKMODE_INACCURATE];

暫停播放

暫停播放視頻,由pause接口實現(xiàn)。示例如下:

[self.player pause];

停止播放

停止播放視頻,由stop接口實現(xiàn)。示例如下:

[self.player stop];

設(shè)置顯示模式

iOS端播放器SDK支持填充、旋轉(zhuǎn)、鏡像等顯示設(shè)置。

填充

支持設(shè)置寬高比適應(yīng)、寬高比填充和拉伸填充這3種畫面填充模式,由scalingMode接口實現(xiàn)。示例如下:

//設(shè)置寬高比適應(yīng)(將按照視頻寬高比等比縮小到view內(nèi)部,不會有畫面變形)
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT;
//設(shè)置寬高比填充(將按照視頻寬高比等比放大,充滿view,不會有畫面變形)
self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFILL;
//設(shè)置拉伸填充(如果視頻寬高比例與view比例不一致,會導(dǎo)致畫面變形)
self.player.scalingMode = AVP_SCALINGMODE_SCALETOFILL;

旋轉(zhuǎn)

指畫面按指定角度旋轉(zhuǎn),由rotateMode接口實現(xiàn)。示例如下:

//設(shè)置畫面順時針旋轉(zhuǎn)0度
self.player.rotateMode = AVP_ROTATE_0;
//設(shè)置畫面順時針旋轉(zhuǎn)90度
self.player.rotateMode = AVP_ROTATE_90;
//設(shè)置畫面順時針旋轉(zhuǎn)180度
self.player.rotateMode = AVP_ROTATE_180;
//設(shè)置畫面順時針旋轉(zhuǎn)270度
self.player.rotateMode = AVP_ROTATE_270;

鏡像

支持水平鏡像、垂直鏡像和無鏡像,由mirrorMode接口實現(xiàn)。示例如下:

//設(shè)置無鏡像
self.player.mirrorMode = AVP_MIRRORMODE_NONE;
//設(shè)置水平鏡像
self.player.mirrorMode = AVP_MIRRORMODE_HORIZONTAL;
//設(shè)置垂直鏡像
self.player.mirrorMode = AVP_MIRRORMODE_VERTICAL;

獲取播放信息

iOS端播放器SDK支持獲取當(dāng)前的播放進度、播放時長和緩沖進度信息。

獲取當(dāng)前播放進度

指獲取當(dāng)前的播放時刻,需要在onCurrentPositionUpdate回調(diào)中獲取position。示例如下:

- (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
//position為當(dāng)前播放進度,單位為毫秒
NSString *position = [NSString stringWithFormat:@"%lld, position"];
}

獲取播放時長

指獲取視頻總時長。需要在視頻加載完成以后才可以獲取到,比如在 onPrepared 回調(diào)之后再獲取。單位:毫秒。示例如下:

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

獲取緩沖進度

指獲取視頻當(dāng)前的緩沖進度,需要在onBufferedPositionUpdate回調(diào)中獲取position。示例如下:

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

獲取實時渲染幀率、音視頻碼率、網(wǎng)絡(luò)下行碼率

示例如下:

//獲取當(dāng)前渲染的幀率,數(shù)據(jù)類型為Float。
[self.playergetOption:AVP_OPTION_RENDER_FPS]
//獲取當(dāng)前播放的視頻碼率,數(shù)據(jù)類型為Float,單位為bps。
[self.playergetOption:AVP_OPTION_VIDEO_BITRATE]
//獲取當(dāng)前播放的音頻碼率,數(shù)據(jù)類型為Float,單位為bps。
[self.playergetOption:AVP_OPTION_AUDIO_BITRATE]
//獲取當(dāng)前的網(wǎng)絡(luò)下行碼率,數(shù)據(jù)類型為Float,單位為bps。
[self.playergetOption:AVP_OPTION_DOWNLOAD_BITRATE]

監(jiān)聽播放狀態(tài)

指監(jiān)聽播放器的狀態(tài),onPlayerStatusChanged回調(diào)參數(shù)為當(dāng)前播放器狀態(tài)。示例如下:

- (void)onPlayerStatusChanged:(AliPlayer*)player oldStatus:(AVPStatus)oldStatus newStatus:(AVPStatus)newStatus {
 switch (newStatus) {
 case AVPStatusIdle:{
 //空轉(zhuǎn),閑時,靜態(tài)
 }
 break;
 case AVPStatusInitialzed:{
 //初始化完成
 }
 break;
 case AVPStatusPrepared:{
 //準(zhǔn)備完成
 }
 break;
 case AVPStatusStarted:{
 //正在播放
 }
 break;
case AVPStatusPaused:{
 //播放暫停
 }
 break;
case AVPStatusStopped:{
 //播放停止
 }
 break;
case AVPStatusCompletion:{
 //播放完成
 }
 break;
case AVPStatusError:{
 //播放錯誤
 }
 break;
 default:
 break;
 }
}

設(shè)置音量

設(shè)置音量包括音量調(diào)節(jié)和靜音設(shè)置。

音量調(diào)節(jié)

指調(diào)節(jié)音量大小,支持0~2倍,當(dāng)音量大于1時,可能出現(xiàn)噪音,不推薦使用。由volume接口實現(xiàn)。設(shè)置后還可獲取音量信息。示例如下:

//volume的值為0~2之間的實數(shù)。
self.player.volume = 1.0f;
//獲取音量信息。
self.player.volume

靜音設(shè)置

指將播放中的視頻設(shè)置為靜音狀態(tài),由muted接口實現(xiàn)。示例如下:

self.player.muted = YES;

倍速播放

iOS端播放器SDK提供了倍速播放視頻的功能,通過設(shè)置rate方法,能夠以0.5倍~5倍速去播放視頻。同時保持變聲不變調(diào)。示例如下:

//設(shè)置倍速播放:支持0.5~5倍速的播放,通常按0.5的倍數(shù)來設(shè)置,例如0.5倍、1倍、1.5倍等
self.player.rate = 1.0f;

多清晰度設(shè)置

如果使用VID方式(VidAuth及VidSts)播放,無需額外設(shè)置。iOS端播放器SDK會從點播服務(wù)獲取清晰度列表。iOS端播放器SDK支持獲取和切換清晰度,UrlSource方式暫不支持此設(shè)置。

獲取清晰度

當(dāng)視頻加載完成后,可以獲取視頻的清晰度。可以使用onTrackReady監(jiān)聽回調(diào)返回info信息,獲取清晰度trackBitrate。

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

切換清晰度

切換清晰度通過selectTrack方法,傳遞對應(yīng)TrackInfo的index即可。

[self.playerselectTrack:index];

清晰度切換通知

清晰度切換完成回調(diào)onTrackChanged。

- (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
 // 切換完成
}

循環(huán)播放

iOS端播放器SDK提供了循環(huán)播放視頻的功能。調(diào)用loop開啟循環(huán)播放,播放完成后,將會自動從頭開始播放視頻。示例如下:

self.player.loop = YES;

同時循環(huán)開始的回調(diào)將會使用AVPEventLoopingStart中通知。示例如下:

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