码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • linux下如何hook第三方播放器的视频数据?


    背景

    作为显卡生产商,当用户使用我们的显卡硬解码播放视频时,如果出现比如花屏等问题,为了快速确定问题原因,我们需要一个工具来帮助判断出问题是出在原始视频端,亦或者是应用程序端,亦或者是显卡端。因此我们需要一种方法,来对目标播放器程序进行监控,并捕获到视频源的解码前和解码后数据,以便对其进行回放排查。

    前置条件

    此方法认为目标程序动态链接了ffmpeg,并使用ffmpeg提供的硬解码能力,其次假设目标程序的ffmpeg版本和我们要开发的小工具所依赖的ffmpeg版本一致。

    方法概述

    在linux下,我们使用LD_PRELOAD环境变量,利用此变量提供的hook能力去拦截目标程序所要调用的ffmpeg关键函数,如果需要解码前数据,那就拦截解封装函数。如果需要解码后数据,那就拦截解码函数。在拦截的函数中,我们添加自己的写文件操作,将两部分数据写到本地文件中即可。

    关于如何使用LD_PRELOAD 劫持函数,可自查用法。
    关注公众号:QTShared,免费阅读更多文章,免费获取源码。

    示例

    在本示例中我们分别劫持解封装函数和解码函数。

    ffmpeg的解封装函数原型为:av_read_frame(AVFormatContext, AVPacket*),调用之后,ffmpeg会将数据填充到用户的AVPacket指针中。 一般用法是循环调用av_read_frame进行解封装并扔到队列,解码线程从队列取数据进行解码。

    首先我们新建一个.c文件用来写我们的hook函数,

  • 相关阅读:
    华山西安三日行
    Grafana系列-统一展示-6-Zabbix仪表板
    Go : golang发布三方包流程简介
    Java中的关键字super
    免申请直接用上 IDEA 新 UI,只需要这三步配置
    php 校园oa办公系统xammp
    netty源码看不懂?试着写一个吧
    UE4 Niagara 关卡1.4官方案例解析
    关于Copy On Write Array List,你会安全使用么
    【解决】linux磁盘扩容大全:新增磁盘、原磁盘扩容、home分区root分区扩容
  • 原文地址:https://blog.csdn.net/u012534831/article/details/136615424
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号