bb_player开发笔记:libupnp在visual studio2019下的配置和编译

Posted 玄道公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bb_player开发笔记:libupnp在visual studio2019下的配置和编译相关的知识,希望对你有一定的参考价值。

最近因为小米电视4升级一次之后,用优酷投屏就非常的卡顿,网络是OK的,网速也是快的,笔者通过在电脑上开启dlna的‘MDP’功能,使用手机或ipad (优酷)投屏,均能正常流产的播放,但坑爹的时候,小米电视的系统不能回滚降级。 于是乎笔者就准备自己写一个android TV版的dlna 接收播放器,来接收优酷的投屏。

于是乎就想到了,使用libupnp 加 FFmpeg(需要使用播放器功能)的方案来实现这个功能。暂时起名,bb_player, 也就是 宝宝 player(因为需求主要是想解决笔者家老婆大人优酷投屏卡顿不爽的问题,所以项目命名为 ‘宝宝播放器’ 。嘿嘿 )。

目前拟定的开发计划是:
step one: 在Windows上使用visual studio 进行开发调试,完整基本的‘DMP’功能,最好还能加上DMC功能,能够回控播放状态,比如暂停,seek等。

step two: 将bb_player 移植到Android下,生成一个APK。因为对Android APK开发不熟悉,暂时也不准备花大量时间去 学习, 所以暂时准备使用native APP 或 qt for Android的方式开发。

libupnp是什么这里即不赘述了,感兴趣的朋友可以问度娘去。笔者这里是使用gitee上的镜像(https://gitee.com/mirrors/pupnpsource)源代码,版本是1.14.0

在使用visual studio2019编译libupnp之前,需要先对libupnp进行预先配置,这里使用到的工具就是autotools工具链。
笔者懒得去折腾虚拟机,所以就使用了Windows自带的wsl2 并安装Ubuntu20.04版本作为运行libupnp配置工具的环境。

系统安装好后,需要在Ubuntu20.04系统下安装autotools相关的工具。

  • sudo apt install build-essential 安装基本的gcc等开发工具
  • sudo apt install automake
  • sudo apt install pkg-config (其实是更新pkg-config)
  • sudo apt install libtool
  • sudo apt install libtool-bin

安装完成之后,就运行可以运行libupnp源码目录下的 bootstrap脚本,生成configure 脚本。然后运行configure脚本,添加对应的参数,生成相应的头文件。

这里暂时不需要交叉编译,也不需要进行裁剪等操作,所以直接使用默认的configure参数。

./configure

接下来就是需要准备 Windows版本的pthread。因为libupnp里面有使用到POSIX的pthread。

下载地址:ftp://sourceware.org/pub/pthreads-win32
解压后,分别将include,lib,dll三个目录的内容放入到:
C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.26.28801目录下:
include, lib, bin 三个目录对应的位置(根据x86 或x64去区分)

最后就是咋visual studio2019上编译,需要注意的是,libupnp源码里面,虽然有visual studio的工程文件,但是vs2010的版本,比较老旧了。 而且这个vs工程里面的目录结构和实际的源码目录结构有出入, 所以直接用visual studio2019打开这个工程之后,还需要做一些目录结构的调整,比如有些是源码文件已经从目录A移动到目录B了, 此时vs工程编译的时候就会提示找不到这些 “xxx.c” 文件,这时就需要把旧的"xxx.c"文件从vs项目中移除,然后再添加正确路径下的“xxx.c”文件到项目中来。

笔者在编译时,发现Windows sdk里面的time.h 和 上面步骤中下载的Windows版pthread里面的pthread.h 里面有一个结构体 timespec 重复定义了, 因此需要在项目属性中添加一个预处理宏:
HAVE_STRUCT_TIMESPEC ,让pthread.h 不去重复定义timespec结构体。

未完待续。。。

以上是关于bb_player开发笔记:libupnp在visual studio2019下的配置和编译的主要内容,如果未能解决你的问题,请参考以下文章

libUpnp缓冲区溢出拒绝服务等漏洞分析

Web前端文档阅读笔记-vis.js在vue cli中的使用

算法笔记(图专题)

算法笔记--最短路算法

「学习笔记」SPFA 算法的优化

ROS学习笔记之——3D map merge