一、前言

采用ffmpeg解码,是所有视频监控开发人员必备的技能,绕不过去的一个玩意,甚至可以说是所有音视频开发人员的必备技能。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。这个项目是由 Fabrice Bellard 发起的,现在由 Michael Niedermayer 主持。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。

关于ffmpeg解码,网上搜索到的代码绝对是一大堆一大堆,而且很多都讲得很详细,解码的函数流程图非常清晰,关于ffmpeg这块的学习本人推荐雷神的博客,分析的相当细致,我在很久以前刚用Qt+ffmpeg解码的时候,参考的就是雷神的例子,当然这些demo其实在ffmpeg的开发包dev下的examples也是非常详细的,只不过没有什么分析过程,参考雷神的博客可以看到很多分析过程。

本人总结的解码过程:

  1. 注册解码库相关(av_register_all、avformat_network_init等)
  2. 初始化各种参数比如缓存大小等(av_dict_set)
  3. 打开视频流或者文件(avformat_alloc_context、avformat_open_input)
  4. 获取流信息(avformat_find_stream_info)
  5. 获取视频流并初始化视频解码器(av_find_best_stream、avcodec_find_decoder)
  6. 获取音频流并初始化音频解码器(av_find_best_stream、avcodec_find_decoder、avcodec_open2)
  7. 预分配帧内存(av_frame_alloc)
  8. 循环读取音视频帧(av_read_frame、av_packet_unref)
  9. 解码视频(avcodec_decode_video2或者avcodec_send_packet、avcodec_receive_frame)
  10. 解码音频(avcodec_decode_audio4)
  11. 处理结束释放资源(sws_freeContext、av_frame_free、av_free)

二、功能特点

  1. 多线程实时播放视频流+本地视频+USB摄像头等。
  2. 支持windows+linux+mac,支持ffmpeg3和ffmpeg4,支持32位和64位。
  3. 多线程显示图像,不卡主界面。
  4. 自动重连网络摄像头。
  5. 可设置边框大小即偏移量和边框颜色。
  6. 可设置是否绘制OSD标签即标签文本或图片和标签位置。
  7. 可设置两种OSD位置和风格。
  8. 可设置是否保存到文件以及文件名。
  9. 可直接拖曳文件到ffmpegwidget控件播放。
  10. 支持h265视频流+rtmp等常见视频流。
  11. 可暂停播放和继续播放。
  12. 支持回调模式和句柄两种模式。
  13. 支持线程读取进度等信息和事件回调两种处理模式。
  14. 自动将当前播放位置和音量大小是否静音以信号发出去。
  15. 提供接口设置播放位置和音量及设置静音。
  16. 支持存储单个视频文件和定时存储视频文件。
  17. 自定义顶部悬浮条,发送单击信号通知,可设置是否启用。
  18. 支持qsv、dxva2、d3d11va等硬解码。
  19. 支持opengl绘制视频数据,极低CPU占用。
  20. 支持嵌入式linux。

三、效果图

四、相关站点

  1. 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo
  2. 国际站点:https://github.com/feiyangqingyun/QWidgetDemo
  3. 个人主页:https://blog.csdn.net/feiyangqingyun
  4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
  5. 体验地址:https://blog.csdn.net/feiyangqingyun/article/details/97565652

五、核心代码

bool 

ffmpeg获取设备支持的分辨率_Qt音视频开发6-ffmpeg解码处理相关推荐

  1. ffmpeg获取设备支持的分辨率_短视频字幕提取合成超简单,掌握ffmpeg这个小技巧

    引言 现在的短视频非常流行.大多数情况下我们会开着音量或者戴着耳机收看视频.但有些时候不是太方便,如果视频能有一个字幕就好了. 好消息是,字幕制作的软件很专业很好用,而且上手超级简单. 坏消息是,如何 ...

  2. V4L2 获取设备支持的分辨率

    {//获取摄像头所支持的分辨率 enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;     struct v4l2_fmtdesc fmt_1 ...

  3. Qt音视频开发01-共享解码线程(耗时一年/性能凶残/至臻完美)

    一.前言 大概在8年前就开始用ffmpeg做视频解码的显示,第一个版本就100行代码左右,功能极其简单,就是开个线程解码视频流转成图片发给主界面绘制.时间过得真快,从当初的一胎到现在二胎都上学了三胎计 ...

  4. ffmpeg 命令_Qt音视频开发11-ffmpeg常用命令

    一.前言 大部分的格式转换工具比如格式化工厂等,都用到了ffmpeg来处理,ffmpeg编译后生成的ffmpeg.exe.ffplay.exe.ffprobe.exe等可执行文件,其实就封装了众多牛逼 ...

  5. c++ vlc读取摄像头_Qt音视频开发1-vlc解码播放

    ## 一.前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用q ...

  6. mega2560电脑识别不到端口后_Qt音视频开发41-人脸识别嵌入式

    一.前言 大概几年前搞过一套嵌入式linux上的人脸识别程序,当然人脸识别的核心算法并不是自己开发的,关于人脸识别算法这一块,虽然有众多的开源库可以用,甚至还可以用opencv搞算法训练深度学习之类的 ...

  7. Android音视频开发从入门到精通,我这一路走来的经验分享

    前不久,在国家统计局针对北京市进行的农民工市民化状况进行的调研中,从事信息技术,软件技术等IT服务业的人员也被当做农民工. 编程的门槛不高,薪资水平也还可观.这一直是"三百六十行,行行转IT ...

  8. android camera2获取摄像头支持的分辨率

    android camera2 获取摄像头支持的分辨率 41的for循环我注释了,代码是获取最匹配的分辨率. private Size getMatchingSize2(){Size selectSi ...

  9. android flv 编码器,Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载)...

    Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载) 项目地址 https://github.com/979451341/RtmpSave 这个项目主要代码 ...

最新文章

  1. python编程员工资-Python 程序员的工资能有多高?
  2. 2016年下半年《软件评测师》下午试卷及答案
  3. 技术要求→物理安全→防盗窃和防破坏
  4. java调用webservice_Oracle触发器调用webservice说明
  5. Xgboost算法——Kaggle案例
  6. Boosting Adversarial Attacks with Momentum论文解读
  7. 计算机工程 目录 2014年第1期 pdf,2013科技核心期刊目录有效期至2014年).pdf
  8. NTUSER.DAT
  9. linux源代码安装apr,linux APR安装 APR-UTIL 安装 源码安装
  10. Java 汉字 转 拼音/首字母
  11. Win10微软帐户切换不回Administrator本地帐户的解决方法
  12. 上网日志留存_日志留存系统
  13. Moment.js 用法
  14. zblog插件-免费zblog插件各类zblog插件打包
  15. 就您所知,它只是一个Java库
  16. Win11系统保护怎么关闭?Win11系统保护关闭方法
  17. java 8 函数式接口_必看:通俗易懂地告诉你什么是java8中的“函数式接口”
  18. 二手书交易系统用例图2.0
  19. 小哥allegro72讲视频百度云下载
  20. 【论文阅读】面部表情识别综述(2018年)(Deep Facial Expression Recognition: A Survey)

热门文章

  1. spring中context:property-placeholder/元素
  2. iOS实现书架布局样式【一些电子书的首页】
  3. 百年后你怎么在墓碑上留言?
  4. pytorch显卡内存随训练过程而增加_PyTorch重大更新:将支持自动混合精度训练!...
  5. 详解Python线程对象daemon属性对线程退出的影响
  6. mysql 创建时间 只能设置一个_在MySQL中创建数据表时,可以设定主键、外键。那么对于一个数据表,能设置的主键和外键个数最多分别是...
  7. 操作系统时间片轮换_操作系统   时间片轮转法
  8. leetcode_150. 逆波兰表达式求值
  9. 下载安装vs2019详细版
  10. 逻辑与计算机科学之间有什么联系,数学、逻辑与计算机科学的关系