AVFoundation视频播放(非音视频流处理)
来源:互联网 发布:积分兑换源码 编辑:程序博客网 时间:2024/04/30 00:00
前面我们已经提到了利用AVFoundation实现音视频播放,那么为什么这里又来讲一次呢?原因在于他们之间在IOS中的层次结构不一样。
如果我们吧视频播放排个顺序的话:
(1)MediaPlayer.framework(framework) 最上层cocos touch层,简单类比一下。最上层。
(2)AVPlayer (calss)多媒体层 第二层
(3)AVAsset(class) 可以认为更底层一点。
后面两个都属于AVFoundation框架,第一个部分比较简单这里就不做详细介绍了,第三部分在上一篇对播放、录制已经介绍的比较详细了,也不赘述,这节主要看看第二部分怎么实现,并且了解一下流媒体的一些基本概念。
在进行视频播放的时候首先我们要想到,所需要展示的视频单帧图像都在什么平台上显示出来?这里我们采用的是UIView承载显示的图像。UIView是ios中图像显示的基本元素。另外除了UIView之外,还需要CALayer管理整个界面的显示。UIView是ios中绘图的一个非常重要的类。同时每一个UIView还有一个CALayer类层。从结构上来看UIView和CALayer都是的老祖都是继承NSObjet根类。其中UIView主要用于显示图像以及相应一些触发事件。而CALayer主要用于管理整个图像显示层。例如控制整个图像的属性等。UIView和CALayer共同构成了整个图像的显示结构。CALayer是整个图像显示的基础,UIView是图像显示的高层封装应用。两者是相互依赖相辅相成的。另外我们再来分析一下两者的继承结构。CALayer是直接继承NSObjet,而UIView则在继承底层UIResponder之后再来继承的NSObjet。因此这也是UIView为什么用于相应触发事件的原因。
制作视频播放器的方法很多,在本章中我们主要使用MediaPlayer.framework框架中的MediaPlayer以及AVFoundation.framework框架中的AVPlayer播放本地以及网络视频。MediaPlayer使用的是CALayer类制作播放器。而AVPlayer主要利用CALayer的子类播放视频文件。
在使用AVPlayer以及以后利用opengl等技术播放视频文件或者进行图像处理时,一般都需要重载layerClass方法。AVPlayer的使用,有三个步骤是必不可少的。
(1)第一步:调用
+ (Class)layerClass
{
return [AVPlayerLayerclass];
}
在默认情况下,UIView直接关联CALayer。而在使用AVPlayer的时候,我们需要关联的是CALayer的子类。因此这里要通过layerClass重载此方法。重载完成之后,函数会返回已经创建的核心动画层。同样如果你向使用OPENGl时,仅需修改return [CAEAGLLayer class];即可。
(2)第二步:调用
- (AVPlayerLayer *)playerLayer
{
return (AVPlayerLayer *)self.layer;
}
我们知道在UIView中有个重要的属性:layer。所有从UIView继承来的对象都继承了这个属性。同样我们可以采用这个属性设置所需要显示图像的各种属性。
(3)第三步:调用
-(void)setPlayer:(AVPlayer*)player
{
[(AVPlayerLayer*)[self layer]setPlayer:player];
}
该函数会返回一个播放层,用于指示一个播放器的可视化输出。一般通过这三个方法即可以完成AVPlayer播放器的定制。
前面我们分析了UIView、CALayer、AVPlayer三者之间的关系,下面我们来看看利用AVFoundation.framework框架播放视频的具体步骤。
对于流媒体文件来说:
(1)通过AVURLAsset设置流媒体播放对象。
(2)创建playerItem对象
(3)判断视频播放状态,等待监听到播放状态发生改变,触发响应
(4)播放流媒体视频文件。
使用起来API很简单:[playerseekToTime:kCMTimeZero];
[player play];
[player pause];
回调方法可以控制播放进度,使用起来比较简单,自己做个demo试试呵呵。不过说了。- AVFoundation视频播放(非音视频流处理)
- AVFoundation 视频流处理
- 利用AVFoundation播放视频
- 利用AVFoundation定制个性化音视频播放
- iOS开发-AVFoundation 视频流处理
- iOS学习:AVFoundation 视频流处理
- iOS学习:AVFoundation 视频流处理
- iOS AVFoundation(二)之视频播放
- AVFoundation学习笔记(二):视频播放相关
- 音视频处理-ffmpeg+sdl视频播放
- AVFoundation视频播放、存储原理分析与使用
- AVFoundation编程指南2-用AVPlayer播放视频
- AVFoundation编程指南2-用AVPlayer播放视频
- iOS-音视频采集 by AVFoundation
- AVFoundation之视频
- AVFoundation视频相关参数
- iOS 视频AVFoundation使用
- AVFoundation拍摄视频
- Storm Trident Example 代码阅读笔记
- 关于oracle endian_format的相关解释
- 版本发布后软件测试人员要做的工作
- thinkphp模块部分学习
- Linux中TCP连接过程状态简介
- AVFoundation视频播放(非音视频流处理)
- Hiho1186/ 第五十五周 连通性·四 点双连通分量
- 单元格跨行合并,单元格跨列合并
- 单例设计模式
- Hadoop jps出现process information unavailable提示解决办法
- mongodb-driver-async 如何使用GridFS
- icvGetAuxImages和cvIntegral
- 强连通分量分解 tarjan算法 (hdu 1269)
- TOJ 4127. God Le's Tree