iOS - 自定义视频播放器 -- (1)

iOS - 自定义视频播放器 -- (1),第1张

如何将视频添加上自定义的渲染效果,并显示?

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,怎样在一帧停留,等待一定时间自动进入下一帧等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9617705.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存