http_server_main.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include <iostream>
  2. #include <signal.h>
  3. #include <thread>
  4. #include <chrono>
  5. #include "http_server.h"
  6. using namespace jtjai_media;
  7. // 全局HTTP服务器实例
  8. static std::unique_ptr<HttpServer> g_http_server;
  9. static std::atomic<bool> g_interrupted(false);
  10. // 信号处理函数
  11. void signal_handler(int signal) {
  12. std::cout << "\n接收到信号 " << signal << ",正在停止服务器..." << std::endl;
  13. g_interrupted.store(true);
  14. if (g_http_server) {
  15. g_http_server->stop();
  16. }
  17. }
  18. int main(int argc, char* argv[]) {
  19. std::cout << "========================================" << std::endl;
  20. std::cout << "RTSP视频流管理HTTP服务器" << std::endl;
  21. std::cout << "========================================" << std::endl;
  22. // 注册信号处理器
  23. signal(SIGINT, signal_handler);
  24. signal(SIGTERM, signal_handler);
  25. // 解析命令行参数
  26. std::string output_directory = "./output";
  27. int port = 8080;
  28. if (argc > 1) {
  29. output_directory = argv[1];
  30. }
  31. if (argc > 2) {
  32. port = std::atoi(argv[2]);
  33. }
  34. std::cout << "输出目录: " << output_directory << std::endl;
  35. std::cout << "监听端口: " << port << std::endl;
  36. try {
  37. // 创建HTTP服务器
  38. g_http_server = std::make_unique<HttpServer>(output_directory, port);
  39. // 启动服务器
  40. if (!g_http_server->start()) {
  41. std::cerr << "启动HTTP服务器失败" << std::endl;
  42. return 1;
  43. }
  44. std::cout << "\nHTTP服务器已启动,按 Ctrl+C 停止服务器\n" << std::endl;
  45. // 保持主线程运行
  46. while (!g_interrupted.load()) {
  47. std::this_thread::sleep_for(std::chrono::seconds(1));
  48. }
  49. std::cout << "\n服务器已停止" << std::endl;
  50. } catch (const std::exception& e) {
  51. std::cerr << "服务器异常: " << e.what() << std::endl;
  52. return 1;
  53. }
  54. return 0;
  55. }