当前位置: 首页 > news >正文

监控摄像机网站建设肇庆做网站的有

监控摄像机网站建设,肇庆做网站的有,公司网站域名解析谁来做,由一个网页建成的网站文章目录 FFmpeg视频处理工具使用总结环境配置主函数与参数处理打开输入文件获取流信息分配输出文件上下文猜测输出文件格式创建视频流并设置参数打开输出文件并写入头信息读取、转换并写入帧数据写入尾信息并释放资源运行程序注意事项源代码 FFmpeg视频处理工具使用总结 环境… 文章目录 FFmpeg视频处理工具使用总结环境配置主函数与参数处理打开输入文件获取流信息分配输出文件上下文猜测输出文件格式创建视频流并设置参数打开输出文件并写入头信息读取、转换并写入帧数据写入尾信息并释放资源运行程序注意事项源代码 FFmpeg视频处理工具使用总结 环境配置 在C程序中使用FFmpeg之前需要包含相应的头文件并根据是否使用C编译器可能需要添加extern C块。 cpp #ifdef __cplusplus extern C { #endif #include libavformat/avformat.h #include libavutil/avutil.h #include libavutil/log.h #ifdef __cplusplus } #endif主函数与参数处理 程序入口点是main函数它处理命令行参数并设置日志级别。 int main(int argc, char *argv[]) {// 参数检查if (argc 3) {av_log(nullptr, AV_LOG_ERROR, Usage: %s input file output file\n, argv[0]);exit(-1);}// 输入输出文件路径char *src argv[1];char *dst argv[2];// 设置日志级别av_log_set_level(AV_LOG_DEBUG); }打开输入文件 使用avformat_open_input打开输入文件并检查返回值。 int ret avformat_open_input(pFormatCtx, src, nullptr, nullptr); if (ret 0) {av_log(nullptr, AV_LOG_ERROR, Could not open input file: %s\n, src);exit(-1); }获取流信息 调用av_find_best_stream找到最佳的视频流。 ret av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, nullptr, 0); if (ret 0) {av_log(nullptr, AV_LOG_ERROR, Failed to retrieve input stream information\n);goto _ERROR; }分配输出文件上下文 使用avformat_alloc_context分配输出文件的格式上下文。 oFormatCtx avformat_alloc_context(); if (oFormatCtx nullptr) {av_log(nullptr, AV_LOG_ERROR, Failed to allocate output context\n);goto _ERROR; }猜测输出文件格式 使用av_guess_format猜测输出文件的格式。 outFmt av_guess_format(nullptr, dst, nullptr); if (outFmt nullptr) {av_log(nullptr, AV_LOG_ERROR, Failed to guess output format\n);goto _ERROR; } oFormatCtx-oformat outFmt;创建视频流并设置参数 为输出文件创建视频流并复制输入视频流的参数。 outStream avformat_new_stream(oFormatCtx, nullptr); avcodec_parameters_copy(outStream-codecpar, pFormatCtx-streams[ret]-codecpar); outStream-codecpar-codec_tag 0;打开输出文件并写入头信息 使用avio_open2打开输出文件并使用avformat_write_header写入文件头信息。 ret avio_open2(oFormatCtx-pb, dst, AVIO_FLAG_WRITE, nullptr, nullptr); if (ret 0) {av_log(nullptr, AV_LOG_ERROR, Failed to open output file: %s\n, dst);goto _ERROR; } ret avformat_write_header(oFormatCtx, nullptr); if (ret 0) {av_log(nullptr, AV_LOG_ERROR, Failed to write output file header\n);goto _ERROR; }读取、转换并写入帧数据 读取输入文件的视频帧转换时间戳并使用av_interleaved_write_frame写入输出文件。 while (av_read_frame(pFormatCtx, pkt) 0) {if (pkt.stream_index ret) {// 转换时间戳等pkt.pts av_rescale_q_rnd(pkt.pts, inSteam-time_base, outStream-time_base, AV_ROUND_NEAR_INF);pkt.dts av_rescale_q_rnd(pkt.dts, inSteam-time_base, outStream-time_base, AV_ROUND_NEAR_INF);pkt.duration av_rescale_q(pkt.duration, inSteam-time_base, outStream-time_base);// 写入帧数据av_interleaved_write_frame(oFormatCtx, pkt);}av_packet_unref(pkt); }写入尾信息并释放资源 使用av_write_trailer写入文件尾信息并释放所有资源。 av_write_trailer(oFormatCtx);_ERROR: // 清理资源 if (oFormatCtx oFormatCtx-pb) {avio_close(oFormatCtx-pb);oFormatCtx-pb nullptr; } if (oFormatCtx) {avformat_free_context(oFormatCtx);oFormatCtx nullptr; } if (pFormatCtx) {avformat_free_context(pFormatCtx);pFormatCtx nullptr; }运行程序 程序需要传入两个参数输入文件路径和输出文件路径。例如 ./my_ffmpeg_tool input.mp4 output.mkv确保替换为您的实际文件名和所需的输出格式。 注意事项 确保FFmpeg开发库已正确安装且可链接。检查程序输出的错误信息以进行调试。程序可能需要适当的读取和写入权限。 源代码 cmake 源文件 cmake_minimum_required(VERSION 3.27) project(FFmpeg_exercise) set(CMAKE_CXX_STANDARD 14)# 定义FFmpeg的安装路径变量 set(FFMPEG_INSTALL_DIR /usr/local/ffmpeg)# 将FFmpeg的头文件目录添加到包含路径 include_directories(${FFMPEG_INSTALL_DIR}/include)# 定义FFmpeg库的基础名称根据你的需要调整 set(FFMPEG_LIBS avcodec;avformat;avutil) # 用分号分隔库名# 寻找并链接FFmpeg库 foreach(FFMPEG_LIB ${FFMPEG_LIBS})find_library(${FFMPEG_LIB}_LIBRARY NAMES ${FFMPEG_LIB}PATHS ${FFMPEG_INSTALL_DIR}/lib NO_DEFAULT_PATH)list(APPEND FFMPEG_LIBRARIES ${${FFMPEG_LIB}_LIBRARY}) endforeach()add_executable(FFmpeg_exercise# main.cpp# extra_audic.cppextra_video.cpp) # 链接FFmpeg库 target_link_libraries(FFmpeg_exercise ${FFMPEG_LIBRARIES}) cpp // // Created by 陈伟峰 on 2024/6/22. // #ifdef __cplusplus extern C { #endif // 包含FFmpeg的头文件 #include libavformat/avformat.h #include libavutil/avutil.h #include libavutil/log.h #ifdef __cplusplus} #endif #include iostreamint main(int argc,char *argv[]){int ret {-1};int idx {-1};//1.处理一些参数char *src {nullptr};char *dst {nullptr};AVFormatContext *pFormatCtx {nullptr};AVFormatContext *oFormatCtx {nullptr};AVOutputFormat *outFmt {nullptr};AVStream *outStream {nullptr};AVStream *inSteam {nullptr};AVPacket pkt {nullptr};// 日志信息av_log_set_level(AV_LOG_DEBUG);if(argc3){av_log(nullptr,AV_LOG_ERROR,Usage:%s input file output file\n,argv[0]);exit(-1);}src argv[1];dst argv[2];// 2.打开多媒体输入文件ret avformat_open_input(pFormatCtx,src,nullptr,nullptr);if(ret0){av_log(nullptr,AV_LOG_ERROR,Could not open input file:%s\n,src);exit(-1);}// 3.获取多媒体文件信息ret av_find_best_stream(pFormatCtx,AVMEDIA_TYPE_VIDEO,-1,-1,nullptr,0);if(ret0){av_log(nullptr,AV_LOG_ERROR,Failed to retrieve input stream information\n);goto _ERROR;}// 打开目的多媒体文件oFormatCtx avformat_alloc_context();if(oFormatCtxnullptr){av_log(nullptr,AV_LOG_ERROR,Failed to allocate output context\n);goto _ERROR;}outFmt av_guess_format(nullptr,dst,nullptr);if(outFmtnullptr){av_log(nullptr,AV_LOG_ERROR,Failed to guess output format\n);goto _ERROR;}oFormatCtx-oformat outFmt;// 为目的文件创建一个新的视频流outStream avformat_new_stream(oFormatCtx,nullptr);// 设置视频参数inSteam pFormatCtx-streams[idx];avcodec_parameters_copy(outStream-codecpar,pFormatCtx-streams[ret]-codecpar);outStream-codecpar-codec_tag 0;// 绑定ret avio_open2(oFormatCtx-pb,dst,AVIO_FLAG_WRITE, nullptr, nullptr);if(ret0){av_log(nullptr,AV_LOG_ERROR,Failed to open output file:%s\n,dst);goto _ERROR;}// 写入头信息ret avformat_write_header(oFormatCtx,nullptr);if(ret0){av_log(nullptr,AV_LOG_ERROR,Failed to write output file header\n);goto _ERROR;}// 写多媒体文件到目的文件ret avformat_write_header(oFormatCtx,nullptr);if(ret0){av_log(nullptr,AV_LOG_ERROR,Failed to write output file header:%s\n, av_err2str(ret));goto _ERROR;}while(av_read_frame(pFormatCtx,pkt)0) {if (pkt.stream_index idx) {pkt.pts av_rescale_q_rnd(pkt.pts, inSteam-time_base, outStream-time_base,(AVRounding) (AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));pkt.dts av_rescale_q_rnd(pkt.dts, inSteam-time_base, outStream-time_base,(AVRounding) (AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));pkt.duration av_rescale_q(pkt.duration, inSteam-time_base, outStream-time_base);pkt.stream_index 0;pkt.pos -1;av_interleaved_write_frame(oFormatCtx, pkt);}av_packet_unref(pkt);}// 写入尾信息av_write_trailer(oFormatCtx);_ERROR:if(oFormatCtx-pb){avio_close(oFormatCtx-pb);oFormatCtx-pb nullptr;}if(oFormatCtx){avformat_free_context(oFormatCtx);oFormatCtx nullptr;}if(pFormatCtx){avformat_free_context(pFormatCtx);pFormatCtx nullptr;}return 0; } 执行 ./main demo.mp4 demo2.h264运行 ffplay demo2.h264
http://www.zqtcl.cn/news/217791/

相关文章:

  • 大网站成本品牌设计风格
  • 电大形考任在哪个网站做湖南seo推广服务
  • dede网站 异步生成wordpress 页面新建
  • 郑州网站制作网页网站优化我自己可以做吗
  • 合肥做网站的公司百度做兼职去哪个网站
  • 重庆市城市建设规划官方网站一款app从开发到上线的流程
  • 微网站开发难吗登录qq网页版
  • 网站不备案能解析吗网站开发项目中职责
  • 三优科技 网站开发网站开发实训报告总结
  • 离线推广网站规划书常用的网站都有哪些
  • 成都 视频网站建设网站邮件推送
  • 深圳均安网站制作温州网站优化案例
  • 做网站需要哪些流程网站建设中项目经理的职责
  • 专业低价建设微网站微商城怎么样在wordpress上添加播放视频
  • 网站制作经费预算表域名备案信息查询系统
  • 苏州网站建设找苏州聚尚网络推荐南昌个人网站制作怎么做
  • 普法网站建设wordpress伪静态404错误
  • 易语言如何做浏网站湛江高端网站开发
  • 窦各庄网站建设wordpress 意见反馈
  • 建站公司还有前途吗海拉尔做网站的公司
  • 素材网站有哪些如何做简单视频网站
  • 如何做网站公证宁波网站建设公司比较好
  • 网站建设公司行情新网站建设风格
  • 30天网站建设实录 pdf微信分销工具
  • 深圳电子商务网站 开发招标文件范本
  • 常州网站制作包括哪些网站商城模板
  • wordpress下拉式菜单哈尔滨seo优化公司
  • 网站添加百度地图标注怎么在百度免费推广
  • 如何用照片做模板下载网站南京做网站seo的
  • 网站建设平台方案设计删除网站内容