AVPlayer 示例 添加附加功能(二)


Domo 效果圖以下所示:
ide

註釋:spa

1. 在viewDidLoad中初始化 label slide 等code

    //初始化 進度條 orm

    CMTime playItemDuration = myAVPlayerItem.duration;//視頻的時長視頻

    int seconds = playItemDuration.value/playItemDuration.timescale;//視頻的時長/視頻壓縮比事件

    self.mySlide.maximumValue = seconds;//設置slide的最大值爲換算後的總時間值get

    self.mySlide.value = 0;//設置slide的初始值爲0string

    

    //視頻總時間 以 mm:ss 的格式顯示在lable中it

    self.myTimeEndLab.text = [NSString stringWithFormat:@"%02d:%02d",seconds/60,seconds%60];io

    //初始化播放進度 爲 00:00

    self.myTimeStarlbl.text = @"00:00";  

    //初始化定時器使 slide 根據 視頻播放進度 自動的滑動

    myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(refreshSlideTime) userInfo:nil repeats:YES];

    isPlay = YES;

2. 左側 UILabel (myTimeStarlbl)用來顯示當前視頻播放的進度值,右側的UILabel (myTimeEndLab) 用來顯示視頻的總長度 ,經過定時期 NSTimermyTimer)實現

    部分代碼顯示以下:

    //初始化定時器使 slide 根據 視頻播放進度 自動的滑動

    myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5

         target:self selector:@selector(refreshSlideTime) userInfo:nil repeats:YES];

    isPlay = YES;

    

-(void)refreshSlideTime

{

    //獲取當前視頻的播放時長,根據當前的壓縮比轉換後, 以mm:ss 格式顯示在label中

    CMTime curTime = myAVPlayerItem.currentTime;

    int nowSeconds = curTime.value/curTime.timescale;

    self.mySlide.value = nowSeconds;

    self.myTimeStarlbl.text =

          [NSString stringWithFormat:@"%02d:%02d",nowSeconds/60,nowSeconds%60];

    //當視頻結束時,中止定時器並將標誌位置爲 NO,以便點擊play按鈕時,能夠直接播放視頻,可是要注意在slide的        事件下處理定時器    

    if ([self.myTimeStarlbl.text isEqualToString:self.myTimeEndLab.text])

    {

        [myTimer invalidate];

        isPlay = NO;

    }

}

3. 中間的UIButton按鈕 經過事件 結合BOOL (isPlay) 變量 控制視頻的播放 中止

    部分代碼顯示以下:

    //點擊 啓動或者 中止視頻的播放,由bool量來控制

- (IBAction)myPlayBtn:(id)sender {

    if (isPlay) {

        //若是標誌爲YES,即視頻正在播放,則中止播放,並中止定時器

        [myAVPlayer pause];

        [myTimer invalidate];

    }

    else

    {

        [myAVPlayer play];

        myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(refreshSlideTime) userInfo:nil repeats:YES];

    }

    isPlay = !isPlay;

}


4. 最下側的 UISlide (mySlide)  用來顯示顯示進度,並能夠經過其事件,回播或者快進

    部分代碼顯示以下:

    //當 slide 的進度發生變化時,使視頻的進度也跟着變化

- (IBAction)mySlideChange:(id)sender {

    UISlider *slide = sender;

    int nowSeconds = slide.value;

    CMTime nowTime = myAVPlayerItem.duration;

    nowTime.value = nowSeconds * nowTime.timescale;

    

    [myAVPlayer seekToTime:nowTime];

    if (![myTimer isValid]) {

        self.myTimeStarlbl.text = [NSString stringWithFormat:@"%02d:%02d",nowSeconds/60,nowSeconds%60];

        [myAVPlayer play];

        isPlay = YES;

    }

    

}

相關文章
相關標籤/搜索