crtmpserver svn.717 的一些记录,操作系统为win 7 64bit。
下载后打开vs2010工程,把crtmpserver设为启动项目(默认启动项目是common),编译crtmpserver工程,出现错误:
3>e:\project\crtmpserver-717\sources\thelib\src\protocols\liveflv\innetliveflvstream.cpp(111): error C2593: “operator =”不明确
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(149): 可能是“Variant &Variant::operator =(const char *)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(145): 或 “Variant &Variant::operator =(const double &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(144): 或 “Variant &Variant::operator =(const uint64_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(143): 或 “Variant &Variant::operator =(const uint32_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(142): 或 “Variant &Variant::operator =(const uint16_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(141): 或 “Variant &Variant::operator =(const uint8_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(140): 或 “Variant &Variant::operator =(const int64_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(139): 或 “Variant &Variant::operator =(const int32_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(138): 或 “Variant &Variant::operator =(const int16_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(137): 或 “Variant &Variant::operator =(const int8_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(136): 或 “Variant &Variant::operator =(const bool &)”
3> 尝试匹配参数列表“(Variant, int)”时
3>e:\project\crtmpserver-717\sources\thelib\src\protocols\liveflv\innetliveflvstream.cpp(114): error C2593: “operator =”不明确
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(149): 可能是“Variant &Variant::operator =(const char *)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(145): 或 “Variant &Variant::operator =(const double &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(144): 或 “Variant &Variant::operator =(const uint64_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(143): 或 “Variant &Variant::operator =(const uint32_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(142): 或 “Variant &Variant::operator =(const uint16_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(141): 或 “Variant &Variant::operator =(const uint8_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(140): 或 “Variant &Variant::operator =(const int64_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(139): 或 “Variant &Variant::operator =(const int32_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(138): 或 “Variant &Variant::operator =(const int16_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(137): 或 “Variant &Variant::operator =(const int8_t &)”
3> e:\project\crtmpserver-717\sources\common\include\utils\misc\variant.h(136): 或 “Variant &Variant::operator =(const bool &)”
3> 尝试匹配参数列表“(Variant, int)”时
去crtmpserver google group查了下发现【 这里】提到解决方法,其实就是
sources/thelib/src/protocols/liveflv/innetliveflvstream.cpp
And replace line 111 with:
info["audio"]["droppedPacketsCount"] = (uint64_t)0;
And line 114 with:
info["video"]["droppedPacketsCount"] = (uint64_t)0;
再次编译,出现另外的问题
defaultprotocolfactory.obj : error LNK2019: riferimento al simbolo esterno
"public: __thiscall NATTraversalProtocol::NATTraversalProtocol(void)"
(??0NATTraversalProtocol@@QAE@XZ) non risolto nella funzione "public:
virtual class BaseProtocol * __thiscall
DefaultProtocolFactory::SpawnProtocol(unsigned __int64,class Variant &)"
(?SpawnProtocol@DefaultProtocolFactory@@UAEPAVBaseProtocol@@_KAAVVariant@@@ Z)
outboundconnectivity.obj : error LNK2019: riferimento al simbolo esterno
"public: void __thiscall NATTraversalProtocol::SetOutboundAddress(struct
sockaddr_in *)"
(?SetOutboundAddress@NATTraversalProtocol@@QAEXPAUsockaddr_in@@@Z) non
risolto nella funzione "public: bool __thiscall
OutboundConnectivity::RegisterUDPVideoClient(unsigned long,struct
sockaddr_in &,struct sockaddr_in &)"
(?RegisterUDPVideoClient@OutboundConnectivity@@QAE_NKAAUsockaddr_in@@0@Z)
前面那个帖子也说道解决方法
i think you can fix this by including
this header:
sources/thelib/include/protocols/rtp/nattraversalprotocol.h
and this source:
sources/thelib/src/protocols/rtp/nattraversalprotocol.cpp
现在编译和连接都没问题了,开始debug,crtmpserver.exe启动时需要加载配置文件,就是那个crtmpserver.lua,
crtmpserver.exe crtmpserver.lua
在vs2010启动调试的话要做一点修改。在crtmpserver工程属性的调试页,命令参数填上crtmpserver.lua,工作目录修改为crtmpserver.exe所在的目录(不然会出现各种路劲找不到文件的问题)。
启动调试,发现没找到libeay32.dll, crtmpserver要用到SSL,请下载openssl-win32,然后把libeay32.dll和ssleay32.dll扔去crtmpserver.exe所在目录。
再次启动调试,发现一瞬间就退出了,经过debug,都是配置文件(crtmpserver.lua)的问题。把crtmpserver.lua的94、95行注释掉:
--sslKey="server.key",
--sslCert="server.crt"
再次启动,成功。
关于crtmpserver里rtmp的auth
authentication=
{
rtmp=
{
type="adobe",
encoderAgents=
{
"FMLE/3.0 (compatible; FMSc/1.0)",
"My user agent",
},
usersFile="users.lua"
}
}
users.lua格式(放到applications\flvplayback\目录下):
users=
{
user1="pass1",
user2="pass2"
}