#include "BoostLog.h" #include "DateTime.h" #include "IoContext.h" #include "Live555RtspPusher.h" #include "VideoInput.h" #include "rw_mpp_api.h" #include #include int main(int argc, char const *argv[]) { LOG(info) << "app start..."; int status = rw_mpp__init(); if (status != 0) { LOG(error) << "rw_mpp__init() failed, status: " << status; return -1; } try { auto ioContext = Amass::Singleton::instance(); auto pusher = std::make_shared(*ioContext->ioContext()); std::shared_ptr ofs; std::ostringstream oss; oss << "/data/sdcard/video/record_" << DateTime::currentDateTime().toString("%Y%m%d%H%M%S") << ".h264"; auto path = oss.str(); LOG(info) << "write h264 to " << path; ofs = std::make_shared(path, std::ofstream::binary); auto video = std::make_shared(2592, 1536); video->setPacketHandler([&](const uint8_t *data, uint32_t size) { ofs->write(reinterpret_cast(data), size); pusher->push(data, size); }); video->start(); video->startEncode(); boost::asio::signal_set signals(*ioContext->ioContext(), SIGINT); signals.async_wait([&](boost::system::error_code const &, int signal) { LOG(info) << "capture " << (signal == SIGINT ? "SIGINT" : "SIGTERM") << ",stop!"; video.reset(); rw_mpp__finalize(); ioContext->ioContext()->stop(); }); ioContext->run(); } catch (const boost::exception &e) { LOG(error) << "error"; } catch (const std::exception &e) { LOG(error) << e.what(); } rw_mpp__finalize(); return 0; }