OrangePi3588Media/src/media_server_app.cpp

57 lines
1.3 KiB
C++

#include "media_server_app.h"
#include <iostream>
#include <signal.h>
#include <string>
#include "graph_manager.h"
#include "utils/simple_json.h"
namespace rk3588 {
namespace {
GraphManager* g_manager = nullptr;
void HandleSignal(int) {
if (g_manager) {
std::cerr << "\n[MediaServerApp] Caught signal, stopping...\n";
g_manager->RequestStop();
}
}
} // namespace
MediaServerApp::MediaServerApp(std::string config_path)
: config_path_(std::move(config_path)) {}
int MediaServerApp::Start() {
SimpleJson root_cfg;
std::string err;
if (!GraphManager::LoadConfigFile(config_path_, root_cfg, err)) {
std::cerr << "[MediaServerApp] Failed to load config: " << err << "\n";
return 1;
}
if (!graph_manager_.Build(root_cfg, err)) {
std::cerr << "[MediaServerApp] Failed to build graphs: " << err << "\n";
return 1;
}
g_manager = &graph_manager_;
signal(SIGINT, HandleSignal);
signal(SIGTERM, HandleSignal);
if (!graph_manager_.StartAll()) {
std::cerr << "[MediaServerApp] Failed to start graphs\n";
return 1;
}
std::cout << "[MediaServerApp] Running. Press Ctrl+C to stop.\n";
graph_manager_.BlockUntilStop();
std::cout << "[MediaServerApp] Shutdown complete.\n";
return 0;
}
} // namespace rk3588