网上现有的gstreamer都是基于linux的。其实gst源码是跨编译器的,只有很少的地方是依赖于GCC,改掉就可以了,下面是我在windows下用VS2005编译的总结。实践表明没什么问题。无论是看RTSP视频还是从文件播放都没问题。
具体源码和所有依赖可以自行下载。本文谢绝转载。
环境:用到了ffmpeg,GTK,flex和bsion,第三方的全部从网上下载编译好的。
SVN是我已经做好的工程,http://code.taobao.org/svn/gstreamer/trunk
gstreamerQQ交流群376903622
下面是一些零散的总结
ubuntu 12.04 server
winxp
ubuntu 12.04 server
linux下安装flex和bsion
sudo apt-get install flex-dev bsion-dev
在gsteamer 1.3.1下
make
然后删除所有的中间格式文件
find . -name "*.lo" | xargs rm -f
find . -name "*.libs" | xargs rm -fr
find . -name "*.deps" | xargs rm -fr
拷贝文件夹gsteamer 1.3.1 到windows下
拷贝我的vs8工程文件夹到win32下
此时编译libgsteamer会产生若干编译错误。不过可以试试。
config.h
注释掉#define GST_FUNCTION __PRETTY_FUNCTION__
注释掉#define HAVE_UNISTD_H 1
//#define HAVE_DLFCN_H 1
//#define HAVE_SYS_UTSNAME_H 1
//#define HAVE_PPOLL 1
//#define HAVE_DLADDR 1
//#define HAVE_POSIX_TIMERS 1
//#define HAVE_SYS_PRCTL_H 1
//#define HAVE_SIGACTION 1
//#define HAVE_POLL 1
//#define HAVE_SYS_SOCKET_H 1
//#define HAVE_STDIO_EXT_H 1
//#define HAVE_FSEEKO 1
//#define HAVE_FTELLO 1
VA_COPY(message.arguments, args)
memcpy (&(message.arguments), &args, sizeof(va_list));
GNULIB_defined_setlocale
如果碰到不能调试,删除ncb试试
生成gstreamer1.3.1解决方案时有些项目不能一次编译成功。需要再来几次。不清楚为什么。
编译dll时经常有找不到liggstreamer-1.3.1导出的变量。dll一般用GST_DEBUG_CATEGORY_EXTERN引入库中变量。在该宏前加上__declspec(dllimport)
编译libgstvideoconvert时提示rint找不到符号。videoconvert.c中#include <gst/math-compat.h>
同一个解决方案下多个项目都有tmp-orc.c这个文件。因为生成在同个Debug目录下。导致各项目obj文件冲突。将tmp-orc.c修改为不同名字。
struct rtp_payload
{
guint8 frame_count:4;
guint8 rfa0:1;
guint8 is_last_fragment:1;
guint8 is_first_fragment:1;
guint8 is_fragmented:1;
} __attribute__ ((packed));
在编译库的时候为了避免大量的工程包含路径设置。还是加到VS2005全局设置中去比较方便
VS2005->工具->选项->项目和解决方案->VC++目录->包含文件
F:\gstreamer\gtk+-bundle_3.6.4-20130921_win32\include
F:\gstreamer\gtk+-bundle_3.6.4-20130921_win32\include\glib-2.0
F:\gstreamer\gtk+-bundle_3.6.4-20130921_win32\lib\glib-2.0\include
库文件没加。按个人喜好吧。