AVPlayer 的相关知识

实例:


显示视频的例子

常识:就是这定义了针对不同的系统,如果是不是ios的头文件,也就是切换不到对应的头文件里面;

AVPlayer NSObject
1)管理播放和管理多媒体时间的分配;
2)提供去控制播放器的传输(变化)行为eg:播放、停止、改变播放装置的速率、在媒体时间线寻找不同的时间点;
3)可以播放本地或者远程多媒体文件、例如:QuickTime movies 、 MP3 音频文件, 试听媒体服务的http直播流;

注意:
1)AVPlayer 在一个时间只能够播放一个媒体资源, replaceCurrentItemWithPlayerItem: 这个方法可以重用来播放多个视频;但是一个时间只能够播放一个;(触发一次播放只能够播放一个视频)
2) AVQueuePlayer(AVPlayer子类)用来创建、管理一系列的媒体资源能够继续地被播放;(这个触发一次可以连续播放准备好的多个视频)

AVAsset 类 —————— AVPlayerItem
1、存储多媒体的模型(多媒体的静态方面的属性:eg:创建时间、延时),
2、它本身不适用与AVPlayer(也就是被AVPlayer直接调用);
3、要播放AVAsset资源,需要创建一个动态的对应物在AVPlayerItem中,该对象模仿(模型化出)时间分配和AVPlayer对象被播放显示的状态;【也就是AVPlayer通过AVPlayerItem来使用AVAsset】

获取AVPlayer中的属性内容的方式:静态属性、动态属性(时间)
AVPlayer 是一个动态变化的对象,有两种方式去监听播放器的状态;
1General State Observations:
1KVO 的方式监听player的动态属性,e.g.:**currentItem 或者 playback rate **
(2)必须注册或者注销kvo的改变的通知在 主线程 ;如果在另外的线程上进行更改,可能没有收到通知的部分;
observeValueForKeyPath:ofObject:change:context: 使用这个方法在主线程上;

2)Timed State Observations:
1kvo不能够很好的观察改变的状态,eg:播放时间
22种方法:
addPeriodicTimeObserverForInterval:queue:usingBlock: 监听周期性的时间变化
addBoundaryTimeObserverForTimes:queue:usingBlock: 监听边界的时间变化

一旦状态发生改变,就会执行block里面的内容;就可以在block做一些处理,eg:更新用户播放页面的状态

AVPlayer 、 AVPlayerItem 不是可见对象,也就是不能够直接显示在屏幕上,还需要其他的东东;
2中方法显示:
1)AVKit : 使用AVPlayerViewController (ios、tvos) 、 AVPlayerView(macOs)
将会显示视频的内容包括播放装置、播放控件、和其他的媒体特色 是全屏显示;

2)AVPlayerLayer
1
)自定义播放界面,** 使用 Core Animation CALayer 的子类为CAPlayerLayer AVFoundation上; **
(2)player layer 可以设置为view的(支持)Layer 或者能够直接被添加到layer上;不像AVPlayerView、AVPlayerViewController ,一个Player layer 不能够显示播放装置控件,它们只是简单的显示可见的内容在屏幕上。
3)也就是这些播放装置的空间需要人为的创建去播放、暂停、查找;

同步数据(内容)
除了显示可见的内容通过AVKit或者AVPlayerLayer ,你也能;够同步的显示动画内容通过使用palyer时间皮配置使用AVSynchromnizedLayer。它是CALayer的子类,用于授权到当前Player 时间配置到他的layer 子树;
可以使用AVSynchronizedLayer 创建自定义效果的动画;e.g.:动画或视频过渡的下段,并在与玩家当前的avplayeritem定时同步播放。

外部设备的播放数据处理:
外部播放模型
外部播放模式是当视频数据被松台外面的设备例如apple TV通过Airplay 和mini-connector-based HDMI/VGA 适配器满屏精确播放;
传送到外部设备山的视频数据会被重新压缩才会送到外部设备上;外部设备解压这些数据并且显示视频;
外部播放性能影响AirPlay视频播放是废弃的AirPlay支持属性替换。
注意:
外部播放属性不适用于基于视频输出电缆和适配器的30针连接器。

***基本的属性的分类****
基本上就是一下几个分类:
Creating a Player (创建)
Managing Playback (管理播放)
Managing Automatic Waiting Behavior (管理自动等待的行为)
Managing Time (管理实践)
Observing Time (监听事件)
Media Selection Criteria Settings (媒体选项标准设置)
Managing Closed Caption Display (管理关闭字幕显示)
Managing External Playback (管理外部播放)
Synchronizing Playback to an External Source (同步播放到外部资源上)
Managing Audio Output (管理音频输出)
Player Properties (播放属性)
Managing AirPlay (管理AirPlay)
Constants (常量)
Instance Properties (实例属性)

实例链接:
https://github.com/helinyu/test_AVPlayer

AVQueuePlayer 的内容:
两种方法创建和初始化:

  • (instancetype)queuePlayerWithItems:(NSArray<AVPlayerItem *> *)items;
  • (AVQueuePlayer *)initWithItems:(NSArray<AVPlayerItem *> *)items;
  • (NSArray<AVPlayerItem *> *)items; //所有的item
  • (void)advanceToNextItem; // 下一个
  • (BOOL)canInsertItem:(AVPlayerItem *)item afterItem:(nullable AVPlayerItem *)afterItem; //能否插入
  • (void)insertItem:(AVPlayerItem *)item afterItem:(nullable AVPlayerItem *)afterItem; 插入,一定是插在队列的尾部
  • (void)removeItem:(AVPlayerItem *)item; // 删除player指定的item
  • (void)removeAllItems; //删除所有的item

可参考链接:
http://blog.csdn.net/sharpyl/article/details/51915856

&&&(时间上的精确)
CMTime 时间,表示通过分数来进行表示:
numerator (int64_t value) 分子 denominator (int32_t timescale) 分母
stored (+infinity, -infinity, indefinite, invalid). 允许存储非数字的值;
是否完全精确
timelines : 可以是被增加通过loop,,去区分不同的loop,loop 0 和loop1 相同的名字的不同;
能够和CFDictionry之间进行转化,通过CMTimeCopyAsDictionary 和CMTimeMakeFromDictionary 这个对象(方法);

Quetion: 存在一个问题,就是视频播放的同步还是出现了一点问题:
*** 有时间需要查看一下旋转的内容
&&& 这个文档
AVSynchronizedLayer:CALayer
有关的同步的layer,
类似:CATransformLayer 这个

AVSynchronizedlayer 在指定的AVPlayerItem记时同步;
它本省并不会显示,它只是授权了layer子树的状态,

AVPlayerItem *playerItem = <#Get a player item#>;
CALayer *superLayer = <#Get a layer#>;
// Set up a synchronized layer to sync the layer timing of its subtree
// with the playback of the playerItem
AVSynchronizedLayer *syncLayer = [AVSynchronizedLayer synchronizedLayerWithPlayerItem:playerItem];
[syncLayer addSublayer:<#Another layer#>]; // These sublayers will be synchronized.
[superLayer addSublayer:syncLayer];

  • synchronizedLayerWithPlayerItem:
    初始化
    playerItem layer的记时同步;

AV库的截图方法(这里涉及到CMTime类)


截图的代码结构

参考链接:
http://blog.csdn.net/H_O_W_E/article/details/8879709

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容