#include "main.h" #include "BoostLog.h" #include "DateTime.h" #include "FFmpegResample.h" #include "IoContext.h" #include "OpusCodec.h" #include "RkAudio.h" #include "WebRTCPublisher.h" #include // #include #include #include #include #include #include #include extern void rkDemo(); extern int AI_VqeProcess_AO(); extern int AI_VqeProcess_AO1(); extern void AecTest(); extern int opus_test(); void signal_handler(const boost::system::error_code &error, int signal_number) { if (!error) { LOG(info) << "Caught signal: " << signal_number << std::endl; LOG(info) << "task finished."; std::exit(0); } } int main(int argc, char **argv) { using namespace Amass; using namespace std::placeholders; boost::program_options::options_description optionsDescription("Allowed options"); // clang-format off optionsDescription.add_options() ("help,h", "produce help message") ("echo", "Self-recording and self-play test") ("record", "Record to file.") ("play", "Play pcm file.") ("vqe", boost::program_options::value(), "Enable rk 3a.") ("channels", boost::program_options::value(), "set audio channles") ("path", boost::program_options::value(), "file path") ; // clang-format on boost::program_options::variables_map variablesMap; boost::program_options::store(boost::program_options::parse_command_line(argc, argv, optionsDescription), variablesMap); boost::program_options::notify(variablesMap); if (variablesMap.count("help")) { std::cout << optionsDescription << std::endl; return 1; } std::shared_ptr task; if (variablesMap.count("echo")) { bool vqe = false; if (variablesMap.count("vqe")) { vqe = variablesMap["vqe"].as(); } int channels = 2; if (variablesMap.count("channels")) { channels = variablesMap["channels"].as(); } auto t = std::make_shared(); t->setVqeEnabled(vqe); t->setChannels(channels); task = std::dynamic_pointer_cast(t); } else if (variablesMap.count("record")) { task = std::make_shared(); } else if (variablesMap.count("play")) { std::string path; if (variablesMap.count("path")) { path = variablesMap["path"].as(); } int channels = 2; if (variablesMap.count("channels")) { channels = variablesMap["channels"].as(); } auto t = std::make_shared(); t->setChannels(channels); t->setPath(path); task = std::dynamic_pointer_cast(t); } if (!task) { std::cout << "there is not task." << std::endl << std::endl; std::cout << optionsDescription << std::endl; return 2; } try { LOG(info) << "app start."; RK_MPI_SYS_Init(); initKvsWebRtc(); auto ioConext = Singleton::instance(); boost::asio::signal_set signals(*ioConext->ioContext(), SIGINT, SIGTERM); signals.async_wait(std::bind(&signal_handler, _1, _2)); task->run(); ioConext->run(); } catch (std::exception &e) { LOG(error) << "Exception: " << e.what() << std::endl; } // WebRTCPublisher publisher(true, true); // publisher.start("172.16.103.68", "443", "/index/api/webrtc?app=live&stream=test&type=push"); return 0; }