随笔分类 -  FFmpeg

摘要:一、前言 前面只是开了个异步线程来同时解码音频和视频,音频和视频的解码没有分开,同时将这个异步线程封装成类。这里实现三个类: XAudioThread:音频解码线程 XVideoThread:视频解码线程 XDemuxThread:“生产者” 线程,生产 AVPacket 添加到音频或视频队列,进而 阅读全文
posted @ 2021-04-26 18:55 fengMisaka 阅读(467) 评论(0) 推荐(0) 编辑
摘要:一、前言 在上一篇中我们只实现了 OpenGl 播放视频,现在我们实现播放音频功能,播放音频首先要实现音频重采样,然后通过 Qt 的 QAudioOutput 类实现播放音频。 二、XResample类的实现(重采样) 新创建个工程,命名为 XPlayer_4。然后我们看下 XDemux 类要实现哪 阅读全文
posted @ 2021-04-26 18:54 fengMisaka 阅读(241) 评论(0) 推荐(0) 编辑
摘要:一、前言 这里我们加入 Qt 来设计播放器界面,解码出的 RGB 数据使用 OpenGl 来进行渲染绘制,这样比直接转换成 QImage 在 QLabel 等控件上显示效率更高。 二、XVideoWidget类的实现(渲染绘制RGB) 新创建个工程。然后我们先看下 XVideoWidget 的头文件 阅读全文
posted @ 2021-04-26 18:52 fengMisaka 阅读(3186) 评论(0) 推荐(0) 编辑
摘要:一、前言 在上一篇中我们实现了视频和音频的解封装、解码及写文件,但其基本是堆出来的代码,可复用性以及扩展性比较低,现在我们对它进行类的封装。这里我们先只实现解封装类和解码类。 二、XDemux类的实现(解封装) 新创建个工程 XPlayer_2。然后我们看下 XDemux 类要实现哪些函数: #if 阅读全文
posted @ 2021-04-26 18:51 fengMisaka 阅读(927) 评论(0) 推荐(0) 编辑
摘要:一、前言 由于 FFmpeg 是使用 C 语言开发,所有和函数调用都是面向过程的。所以这里全部代码先放在 main 函数中实现,经过测试和修改后功能正常,再以 C++ 面向对象的方式逐步将代码分解和封装。 二、效果展示 下面代码只先实现音视频解码,解码数据写入文件。解码后的 RGB 和 PCM 数据 阅读全文
posted @ 2021-03-31 19:55 fengMisaka 阅读(1727) 评论(0) 推荐(1) 编辑
摘要:一、前言 在正式编写 FFmpeg 播放器前,我们需要先简单了解下所要用到的 FFmpeg 库、播放与解码流程、函数和相关结构体。 二、FFmpeg 库简介 库 介绍 avcodec 音视频编解码核心库 avformat 音视频容器格式的封装和解析 avutil 核心工具库 swscal 图像格式转 阅读全文
posted @ 2021-03-31 19:50 fengMisaka 阅读(3399) 评论(1) 推荐(2) 编辑
摘要:由于项目需要 RTMP 推送 H264 数据,在网上查找了下相关的方案,总结一下。 RTMP协议简介 在总结之前,我们先简单介绍一下 RTMP 协议。 RTMP(Real Time Messaging Protocol) 实时消息传送协议是 Adobe Systems 公司为 Flash 播放器和服 阅读全文
posted @ 2020-03-21 13:20 fengMisaka 阅读(21145) 评论(0) 推荐(3) 编辑
摘要:本文转载自 "薰衣草的旋律" 的 "crtmpserver系列(一):流媒体概述" ,如有侵权,请联系删除。 概述 所谓流媒体按照字面意思理解就是像流一样的媒体,看起来像是废话。流媒体现在司空见惯,所以一般人大概不会有疑问。事实上在流媒体还没有出现的时候,基本上通过网络播放电影就不太现实。通过网络播 阅读全文
posted @ 2020-03-21 10:11 fengMisaka 阅读(1138) 评论(0) 推荐(0) 编辑
摘要:前面采用 nginx + nginx-rtmp-module 的方式搭建 RTMP 服务器,由于在 windows 下未对 rtmp 模块进行编译,所以后面采用了 nginx Gryphon + nginx-rtmp-module 的方式,成功搭建了 RTMP 服务器。 1 环境与准备文件 开发环境 阅读全文
posted @ 2020-03-18 15:43 fengMisaka 阅读(26103) 评论(0) 推荐(3) 编辑
摘要:RTSP视频流推送 1.RTSP推送本地视频: 这里的 为本地 IP 地址,554为端口。 2.RTSP循环推送本地视频: 加上参数 。 RTMP视频流推送 1.RTMP推送本地视频: 2.RTMP循环推送本地视频: 摄像头推流 1.摄像头推流: 在设备管理器的"照相机"处,获得摄像头名称为"FHD 阅读全文
posted @ 2020-01-07 19:20 fengMisaka 阅读(1771) 评论(0) 推荐(0) 编辑
摘要:下面是一个读取本地 RGB 文件,转换并输出 MP4 视频文件的一个例子,具体步骤如下: 1、创建编码器 2、创建输出视频上下文 3、添加视频流 4、rgb转yuv 5、写视频文件头 6、写视频文件,循环内部进行H264编码 完整代码如下: c++ include extern "C" { incl 阅读全文
posted @ 2020-01-04 09:54 fengMisaka 阅读(2233) 评论(1) 推荐(0) 编辑
摘要:前言 下面代码是在我的上一篇博客: "FFmpeg RGB转YUV" 的代码的基础上修改而来的,创建了编码器并进行 H264 编码,进一步将 RGB 格式像素数据转换成 H264 格式像素数据,亲测有效。 完整代码 c++ include extern "C" { include include } 阅读全文
posted @ 2020-01-02 10:10 fengMisaka 阅读(3706) 评论(1) 推荐(0) 编辑
摘要:前言 下面这个例子是使用 FFmpeg 将 RGB 格式像素数据转换成 YUV 格式像素数据,在本地生成的 YUV 文本使用雷霄骅大神改写的 "yuvplayer" 成功播放。 我测试的 rgb 文件像素格式是 RGB24 的,如果你的是其它像素格式,请自行替换 "像素格式ID" 和申请的内存空间大 阅读全文
posted @ 2019-12-31 23:57 fengMisaka 阅读(4956) 评论(3) 推荐(1) 编辑
摘要:前言 libswscale 是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸,图像的滤波等工作。libswscale 常用的函数数量很少,一般情况下就 3 个: SwsContext 结构体 SwsContext 是转换格式的上下文结构体,也是使用 libswscale 阅读全文
posted @ 2019-12-30 15:19 fengMisaka 阅读(3821) 评论(0) 推荐(1) 编辑
摘要:这里使用 Qt + FFmpeg 实现了一个简单播放视频的例子。先看下按下按钮播放视频时的效果图: 完整工程下载链接: "Github FFmpeg_demo" 注意:一定要将 bin 目录下的 dll 文件拷贝到编译生成的 exe 所在的目录下,否则会提示: ,无法运行。 一、开发环境的准备 我所 阅读全文
posted @ 2019-12-15 23:23 fengMisaka 阅读(13911) 评论(1) 推荐(5) 编辑
摘要:0、FFmpeg 中最关键的结构体之间的关系 FFmpeg 中结构体很多。最关键的结构体可以分成以下几类: 1)解协议(http, rtsp, rtmp, mms) AVIOContext,URLProtocol,URLContext 主要存储音视频使用的协议的类型以及状态。URLProtocol 阅读全文
posted @ 2019-12-14 23:46 fengMisaka 阅读(1892) 评论(0) 推荐(1) 编辑
摘要:一、通用API 1.1 av_register_all() 初始化 libavformat 和注册所有的复用器、解复用器和协议处理器。如果不调用这个函数,可以调用下面的三个函数来选择支持的格式。 注册复用器的函数是 。 注册解复用器的函数是 。 注册协议处理器的函数是 。 注:FFmpeg4.0 以 阅读全文
posted @ 2019-12-14 22:43 fengMisaka 阅读(6321) 评论(1) 推荐(0) 编辑
摘要:笔者才开始学习音视频开发,主要是通过阅读刘歧、赵文杰编著的《FFmpeg从入门到精通》以及雷霄骅博士博客总结写的入门心得体会。 官方文档资料 FFmpeg官方文档:https://ffmpeg.org/documentation.html FFmpeg官方wiki:http://trac.ffmpe 阅读全文
posted @ 2019-12-14 14:54 fengMisaka 阅读(4962) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示