q2nAmor
QT/C++、opengl、opencl、音视频
展开
-
linux下如何hook第三方播放器的视频数据?
在linux下,我们使用LD_PRELOAD环境变量,利用此变量提供的hook能力去拦截目标程序所要调用的ffmpeg关键函数,如果需要解码前数据,那就拦截解封装函数。如果需要解码后数据,那就拦截解码函数。在拦截的函数中,我们添加自己的写文件操作,将两部分数据写到本地文件中即可。关于如何使用LD_PRELOAD 劫持函数,可自查用法。关注公众号:QTShared,免费阅读更多文章,免费获取源码。方法论不一定局限于ffmpeg,也可以应用到比如gstreamer等播放框架中。原创 2024-03-11 09:48:57 · 190 阅读 · 0 评论 -
【超级干货】播放器核心知识点-音视频同步原理深入剖析
本文在反复理解的基础上顺便对网上的一些不正确的解释和说法进行了勘误,对模糊的地方进行了澄清,基本上示例中的每一行代码为什么这么写,它的依据是什么都有明确的解释。完整源码链接:https://gitpub.sietium.com/bridge/ffsync。原创 2024-03-11 09:47:10 · 239 阅读 · 1 评论 -
摄像头拉流低延迟(90ms内)实践和技术讲解
当然有。从摄像头相关领域专业人员了解到,目前端到端网络摄像头的延迟基本为90ms左右。而本文使用的技术方法就可以让延迟降低到稳定的90ms内。首先我们来分析下摄像头从拉流到渲染出来的链路,然后我们预估一个耗时情况。从上图可以看到,假设我们是30fps的摄像头,则端到端的理论延迟数据应该在80ms左右。虽然这只只是一个粗估值,但至少让我们知道底线在哪里。蓝色框的处理是摄像头本身的处理耗时,我们无法干预。绿色框我们可以干预一部分,比如优化网络,优化rtsp接收。原创 2024-03-05 17:20:16 · 1337 阅读 · 0 评论 -
ffmpeg使用vaapi解码后的视频如何基于x11或EGL实现0-copy渲染?
VADisPlay对象比较重要,使用vaapi硬解码,ffmpeg要求我们必须将申请的vadisplay指针赋值给AVCodecContext中的hw_device_ctx的hwctx的display,否则在后面是无法得到有效的vasurfaceID。唯一有点关系的是在初始化egl时因为我们要显示到一个可见的窗口中,所以使用eglCreateWindowSurface函数时需要一个X11 window(在流程图的①处我们已经通过XCreateWindow创建了一个),并将其指针作为egl的渲染目标窗口。原创 2024-03-05 17:10:57 · 699 阅读 · 0 评论 -
RTP timestamp与帧率及时钟频率的关系
RTP timestamp表示每帧的时间,由于一个帧(如I帧)可能被分成多个RTP包,所以多个相同帧的RTP timestamp相等。(可以通过每帧最后一个RTP的marker标志区别帧,但最可靠的方法是查看相同RTP timestamp包为同一帧。其时钟频率为90000(通常视频的时钟频率),若视频帧率为25fps,则相邻帧间RTP timestamp增量值 = 90000/25 = 3600。RTP timestamp是用时钟频率(clock rate)计算而来表示时间的。原创 2024-01-10 14:58:45 · 251 阅读 · 0 评论 -
QT MediaPlayer 高玩,利用QAbstractVideoSurface实现单独的解码和渲染
背景 QT MediaPlayer是一个很好用的QT自带的原生多媒体播放器,它的用法可以看相关文档即可,但要在windows下使用的话需要安装解码器,例如 :LAV Filters。今天这篇文章我们分为两部分来讲,一是利用MediaPlayer得到视频的每一帧。二是利用 VideoOutput 显示自定义的数据流。这两个部分是独立的,也就是说第一点我们得到的每一帧都可以自己控制渲染,不管是使用qwidget还是opengl的方式,具体做法可以参考我之前写的两篇文章:QT + VS2015 ,获取VL原创 2021-09-15 17:22:12 · 1650 阅读 · 0 评论 -
FFmpeg 4.x 从入门到精通(一)—— QT 中如何用 FFmpeg 实现软件解码
背景因为在2021年给自己定了目标和计划,学习ffmpeg,所以这篇文章是实现计划的第一步。ffmpeg 众所周知,就不展开介绍了,下面给出 FFmpeg 4.2 windows x64 lib库和头文件的下载地址(粉丝免积分下载):https://download.csdn.net/download/u012534831/14045436本文也是属于博主的入门学习总结与分享,因此我们先从ffmpeg的软解码开始,从解码到绘制,一起体验下亲自动手的快乐。本文的语言环境基于C++,界面部分是 QT。原创 2021-01-08 17:21:50 · 2777 阅读 · 5 评论