关于Windows Mobile手机视听电脑视音频的程序实现(一)

2023-10-26

 
    心情不好,突然想写博客了,嘿嘿!其实这一个程序是差不多一年前实现的,那时正好着手一个项目,同时后来也因为这一个项目买了一款多普达手机,呵呵!
    这一个项目大概实现这么一个功能:电脑(服务器端)安装一个用于抓取摄像头与麦克风的数据,Windows Mobile手机客户端通过无线连接到电脑,读取这一些数据然后显示在手机界面上面,并能听到声音。其实这一个项目是关于远程教学的,简单的说是把客户端移到手机平台上面。其实还有一个功能是用手机实时看到电脑的桌面界面,这一个这里就略过了。
    我大概的思路是想用Directshow的技术,电脑的服务器端通过它来抓取到视音视频的数据,直接传到手机上面。然后手机也可以通过Directshow的技术再把它显示出来。对于手机客户端来说,它主要的工作只是新开发出一个用于网络播放的Source Filter便可以了。
    如果这一个程序想在电脑上面实现的话,相对是比较简单的。首先推荐一本书《DirectShow开发指南》,这本书的源码里面有这一个源码叫 AVChat它可以实现服务器端与客户端的视频聊天。针对这一个项目来说,其实是在那一个源码的基础上,把服务器端与客户端的功能各实现一半,然后再增加上客户端可以有多个连接就可以了。服务器端抓取视音频,客户端播放视音频,靠socket来通信。只是把源码改动一些,删一些该删的便可以了,似乎都没有什么可以讲的。但若你拿到手机上编译的话,你便会发现跟本编译不过。这就是最大的问题。
    对于window mobile上的directshow的开发与pc平台上的directshow开发有着很多细节上的不同(思想都是一样的)。首先在pc机上,你得安装一个SDK。然后你还得自己编译生成strmbasd.lib/strmbase.lib(若在vs2005上会有一些小错误,难免,改下就好了)。但若在window mobile上,你会发现,它提供了strmbase.lib,还有相应的一些头文件,你根本不用装SDK。但若你是作简单的一些directshow的开发,你可能不会发现有什么问题(若你只有strmbase.lib,还是有一个问题,就是好像不可以debug,这一个不记得清楚了),但若你得自己开发filter,你源码可以编译的情况下,你会出现几个LINK21的错误:
     error LNK2019: unresolved external symbol "public: __cdecl CBaseFilter::CBaseFilter(wchar_t const *,struct IUnknown *,class CCritSec *,struct _GUID const &)" (??0CBaseFilter@@QAA@PB_WPAUIUnknown@@PAVCCritSec@@ABU_GUID@@@Z)
    error LNK2001: unresolved external symbol "public: __cdecl CBaseFilter::CBaseFilter(wchar_t const *,struct IUnknown *,class CCritSec *,struct _GUID const &)" (??0CBaseFilter@@QAA@PB_WPAUIUnknown@@PAVCCritSec@@ABU_GUID@@@Z)
    error LNK2001: unresolved external symbol "public: virtual long __cdecl CBaseFilter::FindPin(wchar_t const *,struct IPin * *)" (?FindPin@CBaseFilter@@UAAJPB_WPAPAUIPin@@@Z)
    error LNK2001: unresolved external symbol "public: virtual long __cdecl CBaseFilter::FindPin(wchar_t const *,struct IPin * *)" (?
    error LNK2001: unresolved external symbol "public: virtual long __cdecl CBaseFilter::JoinFilterGraph(struct IFilterGraph *,wchar_t const *)" (?
    error LNK2001: unresolved external symbol "public: virtual long __cdecl CBaseFilter::JoinFilterGraph(struct IFilterGraph *,wchar_t const *)"
    error LNK2001: unresolved external symbol "public: virtual long __cdecl CBaseFilter::QueryVendorInfo(wchar_t * *)" (?
    error LNK2001: unresolved external symbol "public: virtual long __cdecl CBaseFilter::QueryVendorInfo(wchar_t * *)" ( ?QueryVendorInfo@CBaseFilter@@UAAJPAPA_W@Z)
    刚开始发现这一个心情还很郁闷,但后来静下心来分析,很简单。是因为在包含的文件里面有CBaseFilter的定义,所以可以编译通过,但在strmbase.lib里面,却没有它的实现,所以在链接的时候,发生了link21的错误。
    对于上面这一个问题怎么办呢?我在通过上网疯狂找的时候,在绝望的时候,终于找到了方法。就是通过源码, 自己编绎生成一对strmbasd.lib/strmbase.lib(注意在windows mobile里面是wchar)。而这一个源码,发布在***\WINCE500\PUBLIC\DIRECTX\SDK\SAMPLES\DSHOW\BASECLASSES(在安装了Windows CE Platform Builder 5.0之后便可以得到这一个源码)。也许还有人想直接到过PC上面的SKD来编译,我觉得应该很难,因为它是win32平台上的。如果真的可以,也应该得改很多个地方。所以直接把platform builder 里面的源码baseclasses重新编绎才是最好的方法。若怕影响到platform builder,你可以复制出上面那一个路径的代码进行编绎,注意一定得把CBaseFilter这一个类的实现加上。 然后再引用自己的strmbasd.lib/strmbase.lib便可以了。哈哈!
    但若你都把代码改好了,并且也编译成功,你会发现你手机可以实时播放电脑的摄像头了,但却还听不到声音,那是 因为在window mobile里的Audio Renderer只能用CLSID_AudioRender,而不是CLSID_DSoundRender(AVChat源码里面用的是这一个)。把它改成CLSID_AudioRender这一个便可以了
    这只是一个大概的思路与讲解,其实我现在也是事后诸葛亮,很多具体的麻烦的编译问题我都不记得了。如在你编译出strmbasd.lib后,你在debug模式下也还有link21的错误,这一些都是编绎过程中的细节问题,以后我会一一道来!希望这可以对某一些朋友有用...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Windows Mobile手机视听电脑视音频的程序实现(一) 的相关文章

随机推荐

  • 自然语言处理实战项目18-NLP模型训练中的Logits与损失函数的计算应用项目

    大家好 我是微学AI 今天给大家介绍一下 自然语言处理实战项目18 NLP模型训练中的Logits与损失函数的计算应用项目 在NLP模型训练中 Logits常用于计算损失函数并进行优化 损失函数的计算是用来衡量模型预测结果与真实标签之间的差
  • QQkey后门

    今天凌晨收到 LX2222 的举报反馈被盗号 发布的加速器盗取账号信息 https www 52pojie cn thread 785555 1 1 html 我们着手分析一下看看软件确实发现了问题 被添加了盗取QQkey的后门 通过拿到Q
  • SQL查询语句之查询数据

    目录 1 基本查询语句 2 单表查询 2 1 查询所有字段 1 列出表中的所有字段 2 使用 查询所有字段 2 2 查询指定字段 2 3 查询指定记录 2 4 带 in 关键字的查询 2 5 带 between and 的范围查询 2 6
  • HTML中Table表格的使用与漂亮的表格模板

    1 表格标记 表格是网页中十分重要的组成元素 表格用来存储数据 包含标题 表头 行和单元格 在HTML语言中 表格标记使用符号 table 表示 定义表格光使用 table 是不够的 还需要定义表格中的行 列 标题等内容 标记 说明 表格标
  • Vue2 项目里,使用 Element 的 dialog 里嵌套 tabs,导致关闭 dialog 时浏览器卡死问题

    Vue2 项目里 使用 Element 的 dialog 里嵌套 tabs 导致关闭 dialog 时浏览器卡死问题 解决办法 给 tab 添加 v if 绑定 dialog 的 visible sync
  • 如何查看awr/statspack报表,来定位系统的问题

    author skate time 2010 03 25 如何查看awr statspack报表 来定位系统的问题 数据库的性能指标一般都有什么 只有定好指标才能判定系统的性能 性能参考指标一般有如下几个 1 响应时间 平均每事务的响应时间
  • QT 使用QLibrary加载动态库

    简介 使用QLibraryi可以在程序运行时加载动态链接库 一个QLibrary的实例作用于一个单一的共享库上 QLibrary提 供了一种平台无关的方式访问库中的函数 可以在构建QLibrary的实例时将要加载的库文件传入 也可以在创建
  • python/元组、列表、字典

    Python 的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 字典使用 下面用一个实例来体验一下 s list input r 创建一个字典 for i in s r i r get i 0 1 看下文解释
  • 引爆点--读书有感

    有个理念一直在我心里 都说流行都是轮回 如何去让产品抓住流行趋势 究竟是什么造就了流行 如何去学习 看看周围的世界吧 它看上去似乎雷打不动 无法改变 但只要你找准位置 轻轻一触 它就可能倾斜 书籍理念 个别人物法则 附着力因素法则和环境威力
  • 单片机控制直流电机(风扇)电路详解

    单片机引脚为什么无法直接控制电机或风扇 我们在使用单片机去控制 5V的直流电机或者散热风扇时 可能会有一种疑惑 51单片机的引脚电压为 5V 为什么不直接用单片机引脚去驱动电机或者风扇 实际上单片机的控制引脚 不管是51单片机或者stm32
  • Linux安装python显示“软件包python没有可安装候选”

    在Linux中安装python时 调用 sudo apt get install python 命令出现以下问题 sudo apt get install python sudo lyx 的密码 正在读取软件包列表 完成 正在分析软件包的依
  • java中public/private/protected的具体区别

    java中public private protected的具体区别 public public表明该数据成员 成员函数是对所有用户开放的 所有用户都可以直接进行调用 private private表示私有 私有的意思就是除了class自己
  • 深度学习——更深层次的神经网络

    一个深层次的CNN网络结构 这里使用的卷积层全都是3 3的小型滤波器 特点是随着层的加深 通道数变大 卷积层的通道数从前面的层开始按顺序以16 16 32 32 64 64的方式增加 此外 插入了池化层 以逐渐减小中间数据的空间大小 并且
  • C++ 字符串

    C 提供了以下两种类型的字符串表示形式 C 风格字符串 C 引入的 string 类类型 C 风格字符串 C 风格的字符串起源于 C 语言 并在 C 中继续得到支持 字符串实际上是使用 null 字符 0 终止的一维字符数组 因此 一个以
  • OpenMV的单颜色识别讲解

    OpenMV的官方教程 寻找色块 single color rgb565 blob tracking示例讲解 视频讲解 需要提前看的文章 程序烧录 颜色阈值设置 目录 threshold index和thresholds解析 固定代码部分
  • Vue记住滚动条位置 scrollBehavior + debounce

    Vue记住滚动条位置 1 先给占位符加一层缓存 2 在路由上加一个源信息meta 记录滚动条的top值 3 使用 scrollBehavior 4 给页面添加事件监听 使用前端路由 当切换到新路由时 想要页面滚到顶部 或者是保持原先的滚动位
  • 浅谈 js运行机制 、宏观任务、微观任务

    今天我们谈一下我对js 运行机制 和宏观任务 微观任务的理解 js运行机制有同步运行和异步运行 js是单线程运行模式在进入任务当中如果是同步任务 那么就直接被主线程运行 如果是异步任务 那么就进入任务队列中进行等待运行 直到主线程任务执行完
  • 二叉树基础

    文章目录 一 树的基础 1 树的概念 2 非树 3 树的相关概念 image 20220402143804166 https img blog csdnimg cn img convert a8bbb6f8483be3ca9edd9e354
  • 虚假人脸检测实验

    虚假人脸检测实验 虚假人脸识别 数据集链接 链接 https pan baidu com s 1ZY7 PqPGsxCBFerpfRW13Q pwd 0w2r 或者https download csdn net download weixi
  • 关于Windows Mobile手机视听电脑视音频的程序实现(一)

    心情不好 突然想写博客了 嘿嘿 其实这一个程序是差不多一年前实现的 那时正好着手一个项目 同时后来也因为这一个项目买了一款多普达手机 呵呵 这一个项目大概实现这么一个功能 电脑 服务器端 安装一个用于抓取摄像头与麦克风的数据 Windows