diff --git a/src/Makefile b/src/Makefile index 4cfa157..07444cf 100755 --- a/src/Makefile +++ b/src/Makefile @@ -1,7 +1,7 @@ XX = g++ -PROJECT_ROOT= /opt/shzhao/vpt_ascend +PROJECT_ROOT= /opt/cmhu/vpt_ascend_arm DEPEND_DIR = $(PROJECT_ROOT)/bin SRC_ROOT = $(PROJECT_ROOT)/src diff --git a/src/decoder/dvpp/FFRecoder.cpp b/src/decoder/dvpp/FFRecoder.cpp index 4c99648..3f14288 100644 --- a/src/decoder/dvpp/FFRecoder.cpp +++ b/src/decoder/dvpp/FFRecoder.cpp @@ -146,7 +146,7 @@ bool FFRecoder::init(AVStream* stream, AVCodecContext* avctx, const char* outfil av_opt_set(out_stream_->codec->priv_data, "preset", "ultrafast", 0); av_opt_set(out_stream_->codec->priv_data, "tune", "zerolatency", 0); - av_dump_format(fmt_ctx_, out_stream_->id, outfile_name, 1); + // av_dump_format(fmt_ctx_, out_stream_->id, outfile_name, 1); // [5] 打开输出视频文件并写入视频头信息 if (avio_open(&fmt_ctx_->pb, outfile_name, AVIO_FLAG_WRITE) < 0) { @@ -291,7 +291,7 @@ bool FFRecoder::write_pkt(AVPacket *pkt) { fmt_ctx_->duration += pkt->duration; // 将数据写入到输出流 - int ret = av_interleaved_write_frame(fmt_ctx_, pkt); + int ret = av_write_frame(fmt_ctx_, pkt); if (ret < 0) { fprintf(stderr, "Error while writing output packet: %s\n", av_make_error_string(errbuf, sizeof(errbuf), ret)); return false; @@ -356,7 +356,7 @@ bool FFRecoder::flush() bool FFRecoder::flush_pkt() { - return av_interleaved_write_frame(fmt_ctx_, nullptr); + return av_write_frame(fmt_ctx_, nullptr); } bool FFRecoder::bgr_to_yuv420p(const uint8_t* const buf_bgr, uint8_t* const buf_420p) diff --git a/src/decoder/dvpp/FFRecoderTaskManager.cpp b/src/decoder/dvpp/FFRecoderTaskManager.cpp index 38d0691..77b2c50 100644 --- a/src/decoder/dvpp/FFRecoderTaskManager.cpp +++ b/src/decoder/dvpp/FFRecoderTaskManager.cpp @@ -83,7 +83,14 @@ void FFRecoderTaskManager::cache_pkt(AVPacket* pkt, long long frame_nb){ std::lock_guard l_pkt(m_pkt_list_mtx); // 考虑到一个AVPacket中的数据并不很大,为减少与解码模块的耦合度,方便管理,这里做一个clone - AVPacket *new_pkt = av_packet_clone(pkt); + AVPacket *new_pkt = av_packet_alloc(); + av_init_packet( new_pkt ); + new_pkt->data = (uint8_t *)av_malloc(pkt->size) ; + memcpy(new_pkt->data, pkt->data, pkt->size); + new_pkt->size = pkt->size; + new_pkt->pts = pkt->pts; + new_pkt->dts = pkt->dts; + av_copy_packet_side_data(new_pkt, pkt); DataPacket* newDataPkt = new DataPacket(); newDataPkt->pkt = new_pkt; @@ -360,6 +367,10 @@ void FFRecoderTaskManager::recode_thread2() { auto it = m_pkt_list.begin(); while (it != it_data) { DataPacket* dataPkt = m_pkt_list.front(); + // if(dataPkt->pkt != nullptr) { + // av_packet_free(&dataPkt->pkt); + // dataPkt->pkt = nullptr; + // } delete dataPkt; dataPkt = nullptr; m_pkt_list.pop_front(); @@ -397,8 +408,9 @@ void FFRecoderTaskManager::recode_thread2() { ffrecoder.uninit(); // 发送mq消息 - if(mq_publish_func) { + if(mq_publish_func && recoderinfo.mq_info.length() > 0) { mq_publish_func(recoderinfo.mq_info.c_str()); + LOG_INFO("record save: {}", recoderinfo.mq_info.c_str()); } LOG_INFO("record end, total save: {} start_frame_nb: {} end_frame_nb: {} file_path: {}", count, start_frame_nb, end_frame_nb, file_name); diff --git a/src/decoder/test_recoder.cpp b/src/decoder/test_recoder.cpp index 3afa4cf..448b8fb 100644 --- a/src/decoder/test_recoder.cpp +++ b/src/decoder/test_recoder.cpp @@ -64,7 +64,7 @@ int main(){ MgrDecConfig config; config.name = task_id; - config.cfg.uri = "rtsp://admin:ad123456@192.168.60.165:554/cam/realmonitor?channel=1&subtype=0"; + config.cfg.uri = "/opt/cmhu/data/公安局老桥头_CVR15F89410_1465819864_1B.mp4"; config.cfg.post_decoded_cbk = post_decod_cbk; config.cfg.decode_finished_cbk = decode_finished_cbk; config.cfg.force_tcp = true; // rtsp用tcp diff --git a/src/demo/Makefile b/src/demo/Makefile index 6bd1c9d..0b4f2f9 100755 --- a/src/demo/Makefile +++ b/src/demo/Makefile @@ -1,7 +1,7 @@ XX = g++ -PROJECT_ROOT= /opt/shzhao/vpt_ascend +PROJECT_ROOT= /opt/cmhu/vpt_ascend_arm DEPEND_DIR = $(PROJECT_ROOT)/bin SRC_ROOT = $(PROJECT_ROOT)/src