根据工作安排,最近对gstreamer进行了研究。工作中要求,把播放的视频帧画面拿到,进行一些处理。这东西可是够偏门的,搜索的资料实在太少。经过反复搜索,连蒙带猜,终于解决了。

  解决之后觉得自己真的好幸运:

  1. 之前对gstreamer/cuda等等一无所知,临时上手。
  2. 并没有代码告诉说如何取得视频画面,完全是通过搜索到的一点蛛丝马迹,连蒙带猜找到正确的路子。
  3. 自己的反复测试、验证、分析。
  4. 一两天的时间解决(21号入职,之前安装、搭建环境折腾了好几天)。

  想想自己觉得有点神奇。除了自己勤快,还要真心感恩勤劳的程序员们,感恩观世音菩萨!

  要解决这个问题,确实不是一下子能搞定的,因为其中涉及到cuda。

  有三个关键点:

  1. 对osd增加一个探头。这个相对容易。
  2. 通过gst_buffer_map得到GstMapInfo。这个很难想到。吾怎么想到的?一个是网上搜索,另外是把相应的头文件、结构体仔细研究过。
  3. 通过cudaMemcpy将数据抓出来。这个也很难想到,地址拿到了一访问就崩溃,一般认为获取的方法不对、得到的结果不对等等。吾亦是看到有人用类似的cuda进行缩放,才想到这个可能。也很幸运,找到了正确的办法。

  为了避免同志们的苦恼,在此共享出来,希望能够给大家带来帮助。

  • 增加一个探头:

GstElement*   sink_pad2 = gst_element_get_static_pad (osd, "sink");osd_probe_id = gst_pad_add_probe (sink_pad2, GST_PAD_PROBE_TYPE_BUFFER,  osd_sink_pad_buffer_probe, NULL, NULL);
  • 实现osd_sink_pad_buffer_probe函数:

static GstPadProbeReturn osd_sink_pad_buffer_probe (GstPad * pad, GstPadProbeInfo * probe_info, gpointer u_data){GstBuffer *gstbuf = (GstBuffer *) probe_info->data;GstMapInfo map_info;NvBufSurface *nvsurface = NULL;if (gstbuf == NULL){return NULL;}//memset(&map_info, 0, sizeof(map_info));if (!gst_buffer_map (gstbuf, &map_info, GST_MAP_READ)){g_print ("gst_buffer_map() error!");return NULL;}nvsurface =  *((NvBufSurface **) map_info.data);//nvsurface->width;//nvsurface->height;nPixcelByteCount = nvsurface->width*nvsurface->height*BYTES_ARGB;if (pFrameVideoDataBuffer == NULL){pFrameVideoDataBuffer = malloc(nPixcelByteCount);}//NvBufMemType=2, 即://MEM_CUDA_DEVICE, < Device memory allocated using cudaMallocif (nvsurface->mem_type == MEM_CUDA_DEVICE){//不能直接访问,必须复制出来。cudaMemcpy(pFrameVideoDataBuffer, nvsurface->buf_data[0], nPixcelByteCount, cudaMemcpyDeviceToHost);}else{memcpy(pFrameVideoDataBuffer, nvsurface->buf_data[0], nPixcelByteCount);}gst_buffer_unmap (gstbuf, &map_info);//进行一些处理。//free(pFrameVideoDataBuffer);return GST_PAD_PROBE_OK;
}

全网首发:DeepStream中,获得视频帧数据的代码相关推荐

  1. QT界面中实现视频帧显示的多种方法及应用

    QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...

  2. Python快速从视频中提取视频帧(多线程)

    Python快速提取视频帧(多线程) 今天介绍一种从视频中抽取视频帧的方法,由于单线程抽取视频帧速度较慢,因此这里我们增加了多线程的方法. 1.抽取视频帧 抽取视频帧主要使用了 Opencv 模块. ...

  3. 樱花动漫中的视频下载数据表分析

    昨天有个朋友问我樱花动漫中的视频怎么下载,那么今天我就写篇文章来专门分析下樱花动漫中的视频是怎么下载的,先分析樱花动漫中的视频下载数据表. 1.还是打开我们的视频助手,来分析樱花动漫的数据包,当然你们 ...

  4. android获取摄像头视频帧数据

    1.思路 一.通过android的Camera.setPreviewCallback(PreviewCallback cb)监听回调. 二.此回调函数public void onPreviewFram ...

  5. python抓取表格数据_Python如何实现从PDF文件中爬取表格数据(代码示例)

    本篇文章给大家带来的内容是关于Python如何实现从PDF文件中爬取表格数据(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 本文将展示一个稍微不一样点的爬虫. 以往我们的 ...

  6. Android不显示Camera视频获取摄像头视频帧数据

    1.在Activity界面代码中: private var mCamera: Camera? = null private val mWidth = GwApplication.DEFAULT_REM ...

  7. 视频帧数据用硬件编码输出,仅仅使用FFMPEG将硬件编码出的数据推流RTSP数据后严重花屏且画面卡住不动

    由于使用的是其他硬件编码器出来的数据,所以不再是使用av_read_frame来获取AVPacket包了,所以在输出编码数据的回调接口里写伪代码如下: //相当于初始化AVPacket包 AVPack ...

  8. 【圆梦云巨献 更新至7.5】全网首发小程序开发视频

    圆梦云作为国内专业的weiphp团队,自然不会缺席此次轰动全网的微信大事件:此外,我们除了静心观望,了解众多观点:不忘通过结合自身实力与小程序小道消息,在第一时间推出全网首个微信小程序开发教程.当然, ...

  9. pyQT 视频播放器(三) 实现视频截图、获取每一帧数据

    pyQT 视频播放器(三) 实现视频截图.获取每一帧数据 背景 方法调研 详细代码说明 最终效果 总结: 参考资料 背景 在 "PyQt5 实现视频播放器(二) ,详细版本 ,适合新手入门& ...

  10. 视频大数据技术在智慧城市建设中的应用

    现代社会的信息量正以飞快的速度增长,这些信息里又积累着大量的数据.预计到 2025年,每年产生的数据信息将会有超过 1/3 的内容驻留在云平台中或借助云平台处理.我们需 要对这些数据进行分析和处理,以 ...

最新文章

  1. 腾讯AI Lab视觉计算中心招聘计算机视觉算法实习生
  2. pytorch 批量筛选
  3. E. Turn Off The TV Educational Codeforces Round 29
  4. java-数据结构-续
  5. 使用countup.js使数字动态叠加
  6. 拓端tecdat|数据分析促进白血病预测诊断
  7. 总结了一些很实用值得收藏的站点
  8. 中国银联全渠道系统商户接入 测试指引-银联网关支付产品
  9. matlab图像处理中的错误--调用imhist报错
  10. python 除法符号_python的除法运算符是什么
  11. iOS开发-学习规划及阶段性目标,学习方法整理
  12. 南唐后主李煜诗词选编
  13. Learning Transferable Features with Deep Adaptation Networks
  14. 【20考研】考研数学 复习书籍推荐!
  15. 音视频开发---音视频同步算法
  16. 江苏大学计算机学院姚奕如,小博传递 || 江苏大学第一届计算机文化节成功举办!...
  17. 百度地图导航的接入(包含三种选择方式驾车、公交、步行)
  18. P13 - 软件设计质量评审 之 八个评审要求
  19. 流媒体学习-WebRTC全面入门学习-1
  20. 从妓到后——史上最令男人动心的女人

热门文章

  1. 评委输入的密码如果不正确,当错误的次数达到5次时,该评委的账号会被锁定.如何解锁呢?
  2. linux设置程序开机自启动
  3. websocket 应用实例
  4. Create Table Like Mapping: 基于类型推断的建表方法
  5. Java使用Executor执行Callable任务时的几种方法
  6. 【VMCloud云平台进阶篇】应用层面优化
  7. HTTPS为什么更安全,先看这些 , 网络加密 , 加密解密
  8. 最后的答辩之银行电话营销响应模型
  9. Linux CentOS上用iptables设置防火墙遇到的问题
  10. 使用OpenSSL颁发CA证书