临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

AVFoundation实现一个简易的视频播放器

1月17日 封了心投稿
  核心类
  AVAsset视频资源对象,需要传入本地或网络的URL
  AVPlayerItem获取视频时长及各种状态,需要传入创建好的AVAsset对象
  AVPlayer视频播放类,需要传入创建好的AVPlayerItem对象
  AVPlayerLayer视频显示layer,可以替换或插入到视图树中
  AVAssetImageGenerator获取视频某一帧的缩略图,可以获取某个时间的,也可以批量获取第一步:初始化1。创建AVAsset
  asset〔AVAssetassetWithURL:assetURL〕;
  2。创建AVPlayerItem,可以传入所需要监听的属性,例如视频时长duration
  NSArraykeys〔
  tracks,
  duration,
  commonMetadata,
  availableMediaCharacteristicsWithMediaSelectionOptions
  〕;
  self。playerItem〔AVPlayerItemplayerItemWithAsset:self。assetautomaticallyLoadedAssetKeys:keys〕;
  3。通过KVO给AVPlayerItem添加视频播放状态的监听
  〔self。playerItemaddObserver:selfforKeyPath:statusoptions:0context:PlayerItemStatusContext〕;
  4。创建AVPlayer
  self。player〔AVPlayerplayerWithPlayerItem:self。playerItem〕;
  5。创建显示视频用的AVPlayerLayer,并设置之前创建好的AVPlayer为视频播放器,插入到当前视图树中
  AVPlayerLayerlayer〔AVPlayerLayerplayerLayerWithPlayer:player〕;第二步:首次播放
  〔self。playerplay〕;
  【更多音视频学习资料,点击下方链接免费领取,先码住不迷路】
  点击领取音视频开发基础知识和资料包在第一步的KVO监听中监听到AVPlayerItem的播放状态为AVPlayerItemStatusReadyToPlay,调用AVPlayer的play方法开始播放,这里还写了其它方法,例如监听当前播放时长,批量获取缩略图等,后面会放具体实现
  if(contextPlayerItemStatusContext){
  dispatchasync(dispatchgetmainqueue(),{
  移除监听
  〔self。playerItemremoveObserver:selfforKeyPath:status〕;
  if(self。playerItem。statusAVPlayerItemStatusReadyToPlay){
  添加视频当前播放时间的监听
  〔selfaddPlayerItemTimeOberver〕;
  视频总时长
  CMTimedurationself。playerItem。
  〔self。delegateplayerDidChangeTime:CMTimeGetSeconds(kCMTimeZero)withAssertDuration:CMTimeGetSeconds(duration)〕;
  播放
  〔self。playerplay〕;
  批量获取缩略图
  〔selfgenerateThumbnails〕;
  }
  });
  }
  第三步:暂停
  〔self。playerpause〕;
  第四步:暂停后继续播放,如果设置了倍速,暂停后会重置,这里需要重新设置一下速率,而且一定要放在play方法之后,不然不会生效
  〔self。playerplay〕;self。player。rateplayRate
  第五步:获取当前播放时间,在初始化的KVO监听中调用AVPlayer的如下方法
  (id)addPeriodicTimeObserverForInterval:(CMTime)intervalqueue:(nullabledispatchqueuet)queueusingBlock:(void()(CMTimetime))block(void)addPlayerItemTimeOberver
  {
  CMTimeintervalCMTimeMakeWithSeconds(0。5f,NSECPERSEC);
  dispatchqueuetqueuedispatchgetmainqueue();
  weaktypeof(self)weakS
  self。timeObserver〔self。playeraddPeriodicTimeObserverForInterval:intervalqueue:queueusingBlock:(CMTimetime){
  NSTimeIntervalcurrentTimeCMTimeGetSeconds(time);
  NSTimeIntervaldurationCMTimeGetSeconds(weakSelf。playerItem。duration);
  〔weakSelf。delegateplayerDidChangeTime:currentTimewithAssertDuration:duration〕;
  }〕;
  }
  第六步:速率播放,设置AVPlayer的rate属性
  self。player。rateplayRate
  第七步:移动到某个时间点进行播放,这里有一个细节,当手指按下的时候,需要停止播放并移除播放时长通知,当手指离开,继续播放与监听当前播放时长
  〔self。playerseekToTime:CMTimeMakeWithSeconds(time,NSECPERSEC)〕;手指按下
  (void)progressSliderDidStartChange
  {
  〔self。playerpause〕;
  〔self。playerremoveTimeObserver:self。timeObserver〕;
  self。timeO
  }
  开始移动
  (void)progressSliderSeekToTime:(NSTimeInterval)time
  {
  〔self。playerItemcancelPendingSeeks〕;
  〔self。playerseekToTime:CMTimeMakeWithSeconds(time,NSECPERSEC)〕;
  }
  手指离开
  (void)progressSliderDidEnd
  {
  〔selfaddPlayerItemTimeOberver〕;
  〔self。playerplay〕;
  self。player。rateplayR
  }
  第八步:批量获取缩略图,创建可视化进度条
  创建AVAssetImageGenerator,传入AVAsset类型
  AVAssetImageGeneratorimageGenerator〔AVAssetImageGeneratorassetImageGeneratorWithAsset:self。asset〕;
  批量获取缩略图方法
  (void)generateCGImagesAsynchronouslyForTimes:(NSArray)requestedTimescompletionHandler:(AVAssetImageGeneratorCompletionHandler)handler
  获取某个时间点的缩略图
  (nullableCGImageRef)copyCGImageAtTime:(CMTime)requestedTimeactualTime:(nullableCMTime)actualTimeerror:(NSErrorNullableNullable)outError
  【更多音视频学习资料,点击下方链接免费领取,先码住不迷路】
  点击领取音视频开发基础知识和资料包(void)generateThumbnails
  {
  AVAssetImageGeneratorimageGenerator〔AVAssetImageGeneratorassetImageGeneratorWithAsset:self。asset〕;
  imageGenerator。maximumSizeCGSizeMake(200,0);
  CMTimedurationself。asset。
  NSMutableArraytimes〔NSMutableArrayarray〕;
  CMTimeValueincrementduration。value20;
  CMTimeValuecurrentValue2。0duration。
  while(currentValueduration。value){
  CMTimetimeCMTimeMake(currentValue,duration。timescale);
  〔timesaddObject:〔NSValuevalueWithCMTime:time〕〕;
  currentV
  }
  blockNSIntegerimageCounttimes。
  blockNSMutableArrayimages〔NSMutableArrayarray〕;
  〔imageGeneratorgenerateCGImagesAsynchronouslyForTimes:timescompletionHandler:(CMTimerequestedTime,CGImageRefNullableimageRef,CMTimeactualTime,AVAssetImageGeneratorResultresult,NSErrorNullableerror){
  if(resultAVAssetImageGeneratorSucceeded){
  UIImageimage〔UIImageimageWithCGImage:imageRef〕;
  QXThumbnailthumbnail〔QXThumbnailthumbilWithImage:imagetime:actualTime〕;
  〔imagesaddObject:thumbnail〕;
  }else{
  NSLog(Error:,error。localizedDescription);
  }
  if(imageCount0){
  dispatchasync(dispatchgetmainqueue(),{
  〔self。delegateplayerDidGenerateThumbnails:〔imagescopy〕〕;
  });
  }
  }〕;
  }
  到此,一个简易的视频播放器就完成了,当然了,还有很多的细节需要去处理,这个就需要小伙伴们自己去捉摸了,学习音视频一定是一个漫长又有趣的路,加油!
  如果你对音视频开发感兴趣,觉得文章对您有帮助,别忘了点赞、收藏哦!或者对本文的一些阐述有自己的看法,有任何问题,欢迎在下方评论区讨论!
投诉 评论

爸爸姓鸡超苦恼,不愿双胞胎儿从父姓广西姓鸡的男子,结婚后与太太有了双胞胎孩子。本来夫妻俩为了有新生命感到开心,但这名鸡爸爸想到自己的姓氏太特别,这样替自己的孩子取名很困扰,后来双胞胎出生后,他为孩子取名时突然临……双11沙雕文案1、别人清空购物车靠买,我清空购物车靠删靠过期靠失效。2、天冷了照顾好自己,我们夏天再聊,我借不了你外套也给不了你拥抱:我不回你信息、不是我高冷、而是我手冷。〔强〕……天热喝白酒,不管有钱没钱,这4种白酒要少喝,没酒味还上头越来越燥热的夏季,开一瓶美酒,或独自享受,或跟朋友小聚,感受那醇香佳酿带来的美妙,这大概就是生活向往的模样。不过,经常喝酒的都知道,酒和酒是不一样的,有的喝了惬意,有的喝……8个养生误区,坑惨中老年人!小心养生不成反受伤,建议改掉随着年纪越来越大,身体的各项机能都在走下坡路,因此,现在很多中老年人都开始注重养生,纷纷加入了这股潮流。然而,由于不懂得其中的门道,很多人在养生道路上,走了不少的弯道,以……如何解决APEX英雄转圈进不去游戏,免费加速20天很多玩家提出疑问,在游戏时出现转圈登录不进去的问题,该如何解决呢?接下来,小编不仅为你解决问题,还给大家送福利!白嫖福利在这里!!记住这个口令【APEX111】,然后在网上下载……质量最重要热门新能源汽车百车故障率汇总判断一辆车的质量,能够参考的有权威机构统计的车辆典型问题投诉量排名,其中会有关于车辆通病和销售环节相关问题的汇总;其次则是参考车辆的百车故障率数据,也就是PPH,该数据一般不包……重温经典!那些NBA历史上热血沸腾的名场面,你还记得多少?在NBA历史上,产生过很多精彩镜头,哪怕经过很多年,也会被球迷所铭记,依然令人津津乐道,让人印象深刻,今天继续来盘点最精彩的经典镜头和名场面下部分。没看过上部分的老铁,可……亮出你的党徽今天看电视,一则新闻让我感动的快热泪盈眶了。新闻讲的是,有几位游客到草原去旅游,路途中车陷入泥泞中出不来,一位少数民族的牧民,竭尽全力帮助游客解除了困境。游客很感激,当即……AVFoundation实现一个简易的视频播放器核心类AVAsset视频资源对象,需要传入本地或网络的URLAVPlayerItem获取视频时长及各种状态,需要传入创建好的AVAsset对象AVPlayer……8月PS港服会免如龙7等四款!比欧美服多一款官方公布了8月份港服的PSPlus会免游戏,包括《如龙7》(PS4PS5)、《小小梦魇》(PS4)、《托尼霍克职业滑板12》(PS4PS5),以及比欧美服多出来的一款像素风多人……戈登可换首轮,火箭期待亚当斯22号签报价,不交易让老将带新人太阳在季后赛3比4输给独行侠,爵士2比4输给独行侠,主要原因是太阳和爵士都缺少擅长一个擅打硬仗的第三得分手,这个球员可以在替补对决的时候成为球队的主要进攻点可以在最后时刻留在场……摩托罗拉拿下三个首发,硬件配置拉满,依旧放在两千档在全球知名手机品牌中,企业历史最长的有156年,最短的则仅有3年!需要注意一下,有些手机品牌,一开始可能也不是做手机的。诺基亚历史156年,摩托罗拉93年,排在前两位。虽……
为什么同样都是7mm,但是你的双眼皮看着特别的怪?你是否经历过或者发现过这样的一个问题,那就是同样的双眼皮宽度放在你的眼睛上,看着就不自然、很突兀。是因为你不适合双眼皮吗?是因为做得不自然吗?其实单纯就宽度来讲,可……幼小衔接要不要报班?不要,花钱还没用,老师教你在家自己教娃就要上小学了,到底要不要给娃报幼小衔接?成了幼升小家长纠结的问题。那么,就在这里分享一下我的经验,一起聊聊幼小衔接的话题。在孩子幼小衔接方面,我走过很多弯路我有两……A股如果一只股票当天涨停板反复打开,你知道是怎么回事吗?作为大众投资理财方式之一的股票投资,已经得到广大投资者的认可,投资股票市场也已经成为一种时尚。投资者都想在股市中挣大钱,但作为一种投资,有赚就必然有赔,而且赔钱的比例往往比较大……丰台金秋文化旅游季来北京千灵山公园,与温柔的秋天相遇吧又到了北京最美的季节,凉爽的秋风吹走了夏日的暑气,带来了秋日的寒意,也带来了漫山遍野的秋色。多彩的秋天是走进山里感受季节变换的最好时节。不同与其他景点的人潮汹涌,千灵山公园是一……四步教你减少食物维生素流失维生素是身体必需的营养素,有助于维持人体机能,也能帮助我们抵御疾病的侵扰。大部分情况下,我们的维生素摄入都来源于食物,当然,也有一些人群会通过营养补剂来摄入。通过食物的摄……陈赫退出贤合庄引众怒!加盟商血亏上千万,被骗后集体上街讨公道喜欢吃火锅的朋友,应该听说过贤合庄的大名吧,在男星陈赫的持续宣传下,已经将分店开遍全国。然而,在看似繁荣的背后,亏掉了无数加盟商的血汗钱。有媒体爆料,陈赫已经退出福建贤合……高尿酸有哪些危害?提示若不想高尿酸临门,建议平时做好3件事随着社会的不断发展,人们的饮食习惯与饮食结构也发生了很大的改变,很多以前觉得遥不可及的食物已经出现在了千家万户的餐桌上。但这种改变带来的不仅是味蕾的满足,还使得暗中隐藏的……巴乔世界杯绝唱!意大利难逃点球宿命?98世界杯18决赛意法大1998年7月3日,法国世界杯第一场14决赛开打,东道主法国队坐镇法兰西大球场迎来意大利队的挑战,谁将会是这场强强对话的胜者呢?对法国队来说,此役他们终于等到了中场核心齐……无法割舍的山水情怀生在海边,却在山里长大,对于山的情感远远地超过海。如今,常常流连于海边,而山的情怀却依然是那样厚重,不可替代。也许在山里长大的人,对于山会有一种特殊的情怀。孩提的时候,山……学会这三个穴位,让你远离偏头痛偏头痛是临床上发病最多的头痛,发作时的痛苦虽不致命,但会严重影响病人的生活质量,其病程缠绵不断,经常反复发作,偏头痛并不是一侧脑袋疼,而是一种搏动性的头痛,会有像血管搏动样的规……白酒瓶上有10781,才是粮食酒?行家有这2个标志是纯粮酒大家平时买酒的时候最害怕的是什么呢?大部分人最担心的都是买到勾兑的酒,因此很多朋友经常会在网上学习,怎么去辨别勾兑酒和粮食酒的差别?对此,也有一大部分的网友认为,只要瓶身上有1……中医治疗痞满胃痛呃逆1则,柴胡桂枝汤黄芪当归建中汤加减柴胡桂枝汤、黄芪当归建中汤加减【主治】:痞满、胃痛、呃逆,证属肝郁脾虚,肝脾不调,气血不足,症见胃肠不适多年,伴胸骨后发闷,胃胀隐痛,打嗝,手脚心热。舌质淡胖暗红苔白腻,……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找