rtpstuff.h
上传用户:hnnddl
上传日期:2007-01-06
资源大小:3580k
文件大小:4k
源码类别:

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.4 $
  3.  * $Date: 1998/05/19 18:16:24 $
  4.  */
  5. ////////////////////////////////////////////////////////////////
  6. //               Copyright (c) 1996,97 Lucent Technologies    //
  7. //                       All Rights Reserved                  //
  8. //                                                            //
  9. //                       THIS IS UNPUBLISHED                  //
  10. //                       PROPRIETARY SOURCE                   //
  11. //                   CODE OF Lucent Technologies              //
  12. // AND elemedia   //
  13. //                                                            //
  14. ////////////////////////////////////////////////////////////////
  15. //
  16. ////////////////////////////////////////////////////////////////
  17. // Example programs are provided soley to demonstrate one     //
  18. // possible use of the stack libraries and are included for   //
  19. // instructional purposes only.  You are free to use, modify  //
  20. // and/or redistribute any portion of code in the example     //
  21. // programs.  However, such examples are not intended to      //
  22. // represent production quality code.                         //
  23. //                                                            //
  24. // THE COPYRIGHT HOLDERS PROVIDE THESE EXAMPLE PROGRAMS       //
  25. // "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED     //
  26. // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED     //
  27. // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A            //
  28. // PARTICULAR PURPOSE.                                        //
  29. ////////////////////////////////////////////////////////////////
  30. #ifndef __RTPSTUFF_H__
  31. #define __RTPSTUFF_H__
  32. #include "rtp/rtp.h"
  33. #include <stdio.h>
  34. #if (defined(WIN32))
  35. #include <windows.h>
  36. #include <winsock.h>
  37. #else
  38. #if defined(VXWORKS)
  39. #include "vxWorks.h"
  40. #include "taskLib.h"
  41. #include "semLib.h"
  42. #include "selectLib.h"
  43. #include "fcntl.h"
  44. #include "sockLib.h"
  45. #include "inetLib.h"
  46. #else
  47. #include <sys/types.h>
  48. #include <sys/socket.h>
  49. #include <netdb.h>
  50. #include <netinet/in.h>
  51. #include <arpa/inet.h>
  52. #if (defined(__hpux))
  53. #include <pthread.h>
  54. #else
  55. #include <thread.h>
  56. #endif
  57. #endif // defined(VXWORKS)
  58. typedef int SOCKET;
  59. #endif // defined(WIN32)
  60. // Defines the RTP session for a pair of H245 Logical channels.
  61. class H245RTPSession : public RTPSession
  62. {
  63. public:
  64. H245RTPSession(char *session, int payload_type, int sampling_rate,
  65. int &status);
  66. ~H245RTPSession();
  67. // Caveat : ip is in net byte order and the ports are in 
  68. // net byte order too. 
  69. int SetLocalPorts(unsigned int ip, unsigned short &rtp_port, 
  70. unsigned short &rtcp_port);
  71. void GetLocalPorts(unsigned int& ip, unsigned short &rtp_port,
  72. unsigned short &rtcp_port);
  73. int SetRemotePorts(unsigned int ip, unsigned short rtp_port, 
  74. unsigned short rtcp_port);
  75. void SetLocalPayloadType(int pt)
  76. {
  77. local_pt = pt;
  78. }
  79. void SetRemotePayloadType(int pt)
  80. {
  81. remote_pt = pt;
  82. }
  83. int StartSession();
  84. void StopSession();
  85. protected:
  86. #if (defined(WIN32))
  87. static unsigned __stdcall _begin_rtp_session(void *);
  88. #elif (defined(VXWORKS))
  89. static int _begin_rtp_session(void *);
  90. #else
  91. static void* _begin_rtp_session(void *);
  92. #endif
  93. void recv_rtcp_packet(SOCKET rtcp_sock,
  94. RTCPPacket *packet);
  95. void send_rtcp_packet(SOCKET rtcp_sock, RTCPPacket *packet);
  96. void do_rtp();
  97. int init_rtp_session();
  98. int my_bind(SOCKET s, unsigned int ip, unsigned short *port);
  99. int my_connect(SOCKET s, unsigned int ip, unsigned short port);
  100. void socket_error(SOCKET s, char *message);
  101. int current_tc;
  102. // CAVEAT: All port numbers below are in net byte order.
  103. SOCKET stop_rtpsession_socket;
  104. #if(!defined(WIN32))
  105. int    stop_rtpsession_pipefds[2];
  106. #endif
  107. SOCKET lrtp_socket;
  108. SOCKET lrtcp_socket;
  109. unsigned short lrtp_port;
  110. unsigned short lrtcp_port;
  111. SOCKET rrtp_socket;
  112. SOCKET rrtcp_socket;
  113. unsigned short rrtp_port;
  114. unsigned short rrtcp_port;
  115. unsigned int remote_address;
  116. unsigned int local_address;
  117. int local_pt;
  118. int remote_pt;
  119. #if (defined(WIN32))
  120. unsigned long thread_id;
  121. HANDLE thread_handle;
  122. #elif (defined(VXWORKS))
  123. int thread_id;
  124. #elif (defined(__hpux))
  125. pthread_t thread_id;
  126. #else
  127. thread_t thread_id;
  128. #endif
  129. RTPPacket *framer;
  130. RTPPacket *deframer;
  131. RTCPPacket *rtcp_packet;
  132. FILE *audio_fh;
  133. };
  134. #endif