wmp4client.cpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #include "systems.h"
  2. #include "wmp4client.h"
  3. #include "client_process.h"
  4. #include <rtsp/rtsp_client.h>
  5. #include "player_session.h"
  6. #include "player_media.h"
  7. #include "player_util.h"
  8. #include "our_msg_queue.h"
  9. #include "ip_port.h"
  10. #include "media_utils.h"
  11. #include "playlist.h"
  12. #include "our_config_file.h"
  13. #include <rtp/debug.h>
  14. #include <libhttp/http.h>
  15. #include "codec_plugin_private.h"
  16. static int session_paused;
  17. static int screen_size = 2;
  18. static int fullscreen = 0;
  19. static int volume;
  20. CPlayerSession *psptr;
  21. void set_configs (void)
  22. {
  23. config.read_config_file("Software\Mpeg4ip", "Config");
  24. rtsp_set_loglevel(config.get_config_value(CONFIG_RTSP_DEBUG));
  25. rtp_set_loglevel(config.get_config_value(CONFIG_RTP_DEBUG));
  26. sdp_set_loglevel(config.get_config_value(CONFIG_SDP_DEBUG));
  27. http_set_loglevel(config.get_config_value(CONFIG_HTTP_DEBUG));
  28. volume = config.get_config_value(CONFIG_VOLUME);
  29. if (config.get_config_value(CONFIG_MUTED) != 0)
  30. volume = 0;
  31. if (psptr != NULL) {
  32. psptr->set_audio_volume(volume);
  33. }
  34. }
  35. int main (int argc, char **argv)
  36. {
  37. CClientProcess proc;
  38. SDL_sem *master_sem;
  39. CMsgQueue master_queue;
  40. char errmsg[512];
  41. config.read_config_file("Software\Mpeg4ip", "Config");
  42. open_output("wmp4player.log");
  43. if (proc.enable_communication() < 0) {
  44. printf("Could not enable communicationsn");
  45. Sleep(10 * 1000);
  46. close_output();
  47. return -1;
  48. }
  49. initialize_plugins();
  50. argv++;
  51. argc--;
  52. psptr = NULL;
  53. master_sem = NULL;
  54. if (*argv == NULL) {
  55. proc.initial_response(-1, psptr,"No argument to process");
  56. } else {
  57. rtsp_set_error_func(player_library_message);
  58. rtp_set_error_msg_func(player_library_message);
  59. sdp_set_error_func(player_library_message);
  60. http_set_error_func(player_library_message);
  61. master_sem = SDL_CreateSemaphore(0);
  62. psptr = new CPlayerSession(&master_queue, master_sem,
  63.    *argv);
  64. int ret = -1;
  65. errmsg[0] = '';
  66. if (psptr != NULL) {
  67. ret = parse_name_for_session(psptr, *argv, errmsg, *errmsg, NULL);
  68. if (ret < 0) {
  69. //player_debug_message("%s %s", errmsg, name);
  70. delete psptr;
  71. psptr = NULL;
  72. } else {
  73. if (ret > 0) {
  74. player_debug_message(errmsg);
  75. }
  76. psptr->set_up_sync_thread();
  77. psptr->set_screen_location(100, 100);
  78. psptr->set_screen_size(screen_size);
  79. psptr->set_audio_volume(config.get_config_value(CONFIG_VOLUME));
  80. if (psptr->play_all_media(TRUE) != 0) {
  81. snprintf(errmsg, sizeof(*errmsg), "Couldn't start playing");
  82. delete psptr;
  83. psptr = NULL;
  84. }
  85. }
  86. }
  87. proc.initial_response(ret, psptr, errmsg);
  88. }
  89. // Either way - we need to loop and wait until we get the
  90. // terminate message
  91. int running = 0;
  92. int state = 0;
  93. while (running == 0) {
  94. CMsg *msg;
  95. running = proc.receive_messages(psptr);
  96. while ((msg = master_queue.get_message()) != NULL) {
  97. switch (msg->get_value()) {
  98. case MSG_SESSION_FINISHED:
  99. proc.send_message(GUI_MSG_SESSION_FINISHED);
  100. break;
  101. case MSG_RECEIVED_QUIT:
  102. proc.send_message(GUI_MSG_RECEIVED_QUIT);
  103. break;
  104. case MSG_SDL_KEY_EVENT:
  105. uint32_t len;
  106. const unsigned char *sdl_event = msg->get_message(len);
  107. proc.send_message(GUI_MSG_SDL_KEY,
  108.   (void *)sdl_event,
  109.   len);
  110. break;
  111. }
  112. delete msg;
  113. }
  114. if (psptr != NULL) state = psptr->sync_thread(state);
  115. }
  116. if (psptr != NULL) {
  117. delete psptr;
  118. }
  119. if (master_sem != NULL) {
  120. SDL_DestroySemaphore(master_sem);
  121. }
  122.   // remove invalid global ports
  123. close_plugins();
  124. config.write_config_file("Software\Mpeg4ip", "Config");
  125. close_output();
  126. return 0;
  127. }