ts,ps,mpeg2 decoder and analysis

分析工具,免费下载.

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  54 随笔 :: 0 文章 :: 168 评论 :: 0 Trackbacks
by default live library includes winsock.h through windows.h instead of winsock2.h, but requires Winsock 2 in  initializeWinsockIfNecessary(...) function.
IP_ADD_MEMBERSHIP value for Winsock1 is 5, and for Winsock 2 is 12.
Therefore socketJoinGroup(...) function is trying to call setsockopt(IP_ADD_MEMBERSHIP) from Winsock 2 with optname from Winsock 1.
There is the confusion between Winsock versions.


live555的 组播的code如下 :

 testAddr.s_addr = our_inet_addr("228.67.43.91"); // arbitrary
      Port testPort(15947); // ditto

      sock = setupDatagramSocket(env, testPort);
      if (sock < 0) break;

      if (!socketJoinGroup(env, sock, testAddr.s_addr))
   {
    env<<"Failed to socket Join Group\n";
    break;
   }


结果:

 if (setsockopt(socket, IPPROTO_IP, IP_ADD_MEMBERSHIP,
   (const char*)&imr, sizeof (struct ip_mreq)) < 0) {

一直失败:错误提示为: 10042:

修改为: if (setsockopt(socket, IPPROTO_IP, 12,
   (const char*)&imr, sizeof (struct ip_mreq)) < 0) {


因为不同的socket版本,定义IP_ADD_MEMBERSHIP 的值不同:

in socket ver1.0中:
#define IP_ADD_MEMBERSHIP 5

in socket ver2.0中:
#define IP_ADD_MEMBERSHIP 12
posted on 2012-10-15 21:54 TS,MPEG2,dvbc专家 阅读(5666) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。