博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AVPlayer 示例 添加附加功能(二)
阅读量:6675 次
发布时间:2019-06-25

本文共 2323 字,大约阅读时间需要 7 分钟。

hot3.png

 

Domo 效果图如下所示:

175328_mk3v_818427.png

注释:

1. 在viewDidLoad中初始化 label slide 等

    //初始化 进度条

    CMTime playItemDuration = myAVPlayerItem.duration;//视频的时长

    int seconds = playItemDuration.value/playItemDuration.timescale;//视频的时长/视频压缩比

    self.mySlide.maximumValue = seconds;//设置slide的最大值为换算后的总时间值

    self.mySlide.value = 0;//设置slide的初始值为0

    

    //视频总时间 以 mm:ss 的格式显示在lable中

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

    //初始化播放进度 为 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;

    }

    

}

转载于:https://my.oschina.net/starmier/blog/189299

你可能感兴趣的文章
#Linux学习笔记# Linux文件的所有者、群组和其他人
查看>>
最近反思
查看>>
java四舍五入的取舍
查看>>
Maven支撑下的War应用依赖另外一个WAR应用的解决方案
查看>>
JavaScrip——练习(做悬浮框)
查看>>
从游戏开发到应用开发的转变
查看>>
UIApearance
查看>>
android: LayoutInflater使用
查看>>
phalcon的url大小写的问题
查看>>
Tair ldb(leveldb存储引擎)实现介绍
查看>>
【Swift 2.1】为 UIView 添加点击事件和点击效果
查看>>
[ROS]3 Linux编程练习
查看>>
Codeforces 67C Sequence of Balls 编辑距离 dp
查看>>
Git 创建仓库【转】
查看>>
8VC Venture Cup 2016 - Elimination Round C. Block Towers 二分
查看>>
epoll的LT和ET模式
查看>>
Android IOS WebRTC 音视频开发总结(六四)-- webrtc能走多远我不知道,但这个市场真实存在...
查看>>
文件的相对路径和绝对路径以及根相对路径
查看>>
Java-final
查看>>
选择排序(内测第0届第2题)
查看>>