1、解码视频
2、获取视频帧
3、渲染视频帧
4、显示渲染后的视频帧
5、编码视频帧,生成新的视频
AVPlayer:驱动播放用例的中心阶层,是用于管理媒体资产的回放和定时的控制器对象
这里AVPlayer,我制作简单的播放,暂停,seek。并且添加上AVPlayerItemVideoOutput做一个视频帧输出的工作。
创建一个播放器
AVPlayerItemVideoOutput 获取视频帧
主要的核心工具是 AVPlayerItemVideoOutput ,这对象相当于一个视频解码工具,对它进行属性设置,可以获取视频中某一时刻的想要数据的 CVPixelBuffer 视频帧。
通过获取到的CVPixelBuffer,进行OPenGL自定义渲染显示。
外部需要开启一个定时器,来实时的进行画面的刷新。定时器时间可以根据视频的FPS来控制。
至此如何获取视频帧就可以了。
如何获取视频帧,这里都比较简单,都是通过系统层去实现功能。
主要注意的是:
1、AVPlayerItemVideoOutput的获取的数据格式定义,根据 需求设置RGBA还是YUV420的数据 。
2、AVPlayer使用seek时候,使用 精度比较高的方法 ,提高在seek时候的画面流畅度
3、获取的CVPixelBuffer 在Swift语言,不需要手动释放 。在OC上需要调用 CVPixelBufferRelease() 手动释放
Git Code:AVPlayer-Render
查看视频帧数的方法有很多,这里介绍查看方法,借助pr工具,下面来看下方法。
1、首先在桌面上双击打开Adobe Premiere Pro CS55,d出欢迎使用界面,在界面上点击新建项目。
2、在pr软件中“上传”视频,这个时候在视频素材上右击。
3、打开鼠标右键菜单后,点击“属性”。
4、最后在“属性”对话框中就可以看到视频的帧速率数值了。
在第一帧上写上
,//暂停
stop();
//pause函数
function pause()
{clearInterval(pauseInterval);
play()
;}
pauseInerval = setInterval(pause, 3000);
//每隔3000毫秒调用pause函数也就是说暂停3秒
objectMainextendsApp{
varreverse_pairs = 0//逆序数
defmsort[T](cmp:(T, T) => Boolean)(l:List[T]):List[T] = {
defmerge(l1:List[T], l2:List[T]):List[T]=(l1, l2)match{
case(Nil, _) => l2
case(_, Nil) => l1
case(x::left1, y::left2) =>
if(cmp(x, y))
x::merge(left1, l2)
else{
reverse_pairs += l1length
y::merge(l1, left2)
}
}
valn = llength / 2
if(n == 0)
return l
else{
val(l1, l2) = lsplitAt(n)
merge(msort(cmp)(l1), msort(cmp)(l2))
}
}
println(msort((x:Int, y:Int) => x<y)(List(5, 4, 3, 2, 7,6 )))
println(reverse_pairs)
}
以上就是关于iOS - 自定义视频播放器 -- (1)全部的内容,包括:iOS - 自定义视频播放器 -- (1)、pr如何查看导入的视频文件帧数、flash,怎样在一帧停留,等待一定时间自动进入下一帧等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)