
多媒体开发实战指南
文章平均质量分 82
本专栏主要分享基于Gstreamer,RKMPP,OpenGL ES、Vulkan、Metal的项目实战经验,包含开发细节,优化方案设计和难点突破,内容深入浅出,以项目实战经验为主,配合实战源码分享,效果展示,帮助大家更好的学习和进行多媒体开发。
大王算法
主要做机器人,操作系统,算法及AI方面的研发工作,有感兴趣的朋友可以私信加我好友,一起探讨交流!
展开
-
RKMPP 在FFmpeg上实现硬编解码
特别留意--enable-rkmpp--enable-libdrm因为mpp依赖drm相关的framebuffer。打开codec到上下文avcodec_open2(acc,codec,NULL)依赖mpp的pkglib/pkgconfig/rockchip_mpp.pc。ffmpegrkmpp依赖mpp库librockchip_mpp.so。3、rkmpp实现ffmpeg相关解码(初始化送帧解码取解码后码流)1、声明h264_rkmpp解码器。2、注册解码器h264_rkmpp。......原创 2022-07-31 19:25:43 · 10061 阅读 · 7 评论 -
RKMPP库快速上手--(四)MPP编码入门
为了方便理解和使用,我将mpp的编码封装成了一个class,只需要在定义对象时给出编码器初始化的数据(包括输入图像的首地址、数据格式、宽高,输出视频流的编码格式、FPS以及输出文件路径),后续的使用则只需要通过“process_image(uint8_t *p)”接口向对象喂图片即可,编码器会自动将图像编码然后存入视频流文件。如上图所示,mpp_create,mpp_init,mpp_destory操纵MppCtx接口,红框内是实现编码与解码的过程。首先,了解MPP编码之前,先了解一下MPP的MPI接口。.原创 2022-08-30 21:02:13 · 4900 阅读 · 0 评论 -
RKMPP API安装使用总结
Mpp的API思路其实跟目前绝大多数的编解码库是一致的,都是queue/dequeue的队列操作方式,先设置好编解码状态,然后不停的queue/dequeueinput/outputbuffer就可以实现编解码控制了。自动拼包(建议开启),硬编解码器每次解码就是一个Frame,所以如果输入的数据不确定是不是一个Frame(例如可能是一个Slice、一个Nalu或者一个FU-A分包,甚至可能随意读的任意长度数据),那就必须把该模式打开,MPP会自动分包拼包成一个完整Frame送给硬解码器。......原创 2022-07-31 20:01:06 · 2978 阅读 · 1 评论 -
RKMPP库快速上手--(三)MPP解码入门
常用设置的一些模式解释如下:(其余的可以看MPP自带的开发文档,在doc目录下有详细说明)MPP_DEC_SET_PARSER_SPLIT_MODE : (仅限解码),自动拼包(建议开启),硬编解码器每次解码就是一个Frame,所以如果输入的数据不确定是不是一个Frame(例如可能是一个Slice、一个Nalu或者一个FU-A分包,甚至可能随意读的任意长度数据),那就必须把该模式打开,MPP会自动分包拼包成一个完整Frame送给硬解码器。MPP_DEC_SET_IMMEDIATE_OUT: (仅限解码)..原创 2022-08-30 21:02:32 · 3259 阅读 · 0 评论 -
RKMPP库快速上手--(二)MPP关键配置
一行有 11 个像素(Width = 11), 对一个 24 位(每个像素 3 字节)的图像, Stride = 11 * 3 + 3 = 36.一行有 11 个像素(Width = 11), 对一个 32 位(每个像素 4 字节)的图像, Stride = 11 * 4 = 44./*在视频编码中,GOP的意思是画面组,指定了intra-和inter-帧的顺序。压缩的视频流中GOP相对独立,解码器解码新的GOP时需要之前的帧来解码后面的帧,struct MPP_ENC_DATA //编码所需要的数据。..原创 2022-08-30 21:02:06 · 2560 阅读 · 0 评论 -
RKMPP库快速上手--(一)RKMPP功能及使用详解
我们可以通过gstreamer和ffmpeg的mpp插件来使用mpp硬件加速,但是这两种应用程序都会因为兼容api的原因,徒增几次无用的帧拷贝动作,并且使用的都是虚拟地址。如果想榨干芯片的性能,开发最完美的代码,纯连续的物理buffer和mpp+rga是离不开的。Mpp的API思路其实跟目前绝大多数的编解码库是一致的,都是queue/dequeue的队列操作方式,先设置好编解码状态,然后不停的queue/dequeueinput/outputbuffer就可以实现编解码控制了。...原创 2022-07-31 19:09:18 · 7931 阅读 · 2 评论 -
Gstreamer Plugin注册流程详解
在该函数中,将会先经过gst_plugin_register_func()函数进行plugin的注册,gst_plugin_register_func()将会检查版本之类的信息,而后拷贝关于plugin的描述信息,在经过函数指针desc->plugin_init真正的完成plugin的注册(desc->plugin_init函数指针指向的就是上述说到的plugin_init()函数),这样,就调用到了plugin_init()。2、plugin_init()函数调用。1、从plugin_init()函数。.原创 2022-07-31 18:16:57 · 1542 阅读 · 1 评论 -
Gstreamer应用开发实战指南(三)
一、基于GStreamer的应用程序初始化 元素,pad和缓冲区是GStreamer的基本概念和最常用的对象。我们使用这些对象的可视化表示形式,以便于后面可以简单地构建的更复杂的管道。初步了解GStreamer API以后,基本上足够我们构建基本应用程序了,下面介绍一下基于GStreamer的应用程序的构建过程。1、初始化GStreamer在编写 GStreamer 应用程序时,我们只需要简单地包含gst/gst.h以访问库函数。除此之外,我们还需要初始化GStreamer库。在可以使用 GS原创 2022-05-31 20:59:38 · 694 阅读 · 0 评论 -
GStreamer使用总结
一、GStreamer简介:GStreamer 是用来构建流媒体应用的开源多媒体框架(framework),其目标是要简化音/视频应用程序的开发,已经能够被用来处理像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime等多种格式的多媒体数据。当前项目是尝试用它来开发多路RTSP推流服务器。GStreamer无疑是一个架构优美的设计,但学习起来往往觉得结构复杂,难以掌握,编译起来也很麻烦。二、GStreamer框架图:三、GStreamer编译和安装...原创 2022-04-30 21:51:21 · 933 阅读 · 0 评论 -
Gstreamer应用开发实战指南(一)
GStreamer是一个非常强大和通用的框架,用于创建流媒体应用程序。GStreamer框架的许多优点都来自它的模块化:GStreamer可以无缝地整合新的插件模块。但是,由于模块化和功耗通常以更复杂的代价为代价,因此编写新应用程序并不总是那么容易。本文主要讲解 GStreamer 框架,以便您可以基于它开发应用程序。前几章将重点介绍简单音频播放器的开发GStreamer概念。后面的章节将介绍与媒体播放和其他形式的媒体处理(捕获,编辑等)相关的更高级主题。...原创 2022-05-31 20:56:42 · 707 阅读 · 0 评论 -
GStreamer常用命令总结
最近开始做GStreamer相关项目了,网上搜了一下,相关资料并不多,所以一边查阅一边记录总结一下,方便后期使用。1. 播放视频、音频操作命令音频:gst-launch-1.0 filesrc loaction=123.mp3 ! mad ! autoaudiosink autoaudiosink可换成pulsesink或alsasink,需要使用gst-inspect查询是否存在这些sink插件,其实autoaudiosink是个壳,最终还是选择使...原创 2022-04-30 21:51:56 · 2603 阅读 · 0 评论 -
Gstreamer应用开发实战指南(四)
一、GStreamer中的元素 二、GStreamer中的Bins三、GStreamer中总线原创 2022-05-31 21:12:54 · 2114 阅读 · 0 评论 -
Gstreamer应用开发实战指南(五)
1、垫和功能: 正如我们在 Elements 中看到的,焊盘是元素与外界的接口。 数据从一个元素的源焊盘流向另一个元素的接收焊盘。 元素可以处理的特定媒体类型将通过 pad 的功能公开。2、垫: 焊盘类型由两个属性定义:方向和可用性。 正如我们之前提到的,GStreamer 定义了两个焊盘方向:源焊盘和接收焊盘。 这个术语是从元素内部的角度定义的:元素在它们的接收垫上接收数据并在它们的源垫上生成数据。 示意性地,sink pads 绘制在元素的左侧,而 source pads 绘原创 2022-06-28 22:23:02 · 1223 阅读 · 0 评论 -
GStreamer在Linux平台的交叉编译
一、下载源码: GStreamer: 新闻 我这里是下载到Linux的桌面目录,先拷贝文件到opt:sudo cp -r ohos-sdk/* /opt解压文件:sudo unzip *.zip解压完配置环境变量:fanyun@ubuntu:/opt/linux$ sudo vi /etc/profilefanyun@ubuntu:/opt/linux$ source /etc/profile 1 编译依赖首先依赖关系如下:gstreamer -> glib -原创 2022-06-28 22:55:10 · 1259 阅读 · 1 评论 -
GStreamer使用详解
使用系统自带的源,安装过程中会报错,因此先切换源,这里优先选择清华的源,阿里的源部分不维护,会安装报错。1.备份原来的源,将以前的源备份一下,以防以后可以用的。sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2.打开/etc/apt/sources.list文件,在前面添加如下条目,并保存。sudo vim /etc/apt/sources.list3.摁i进入插入模式4.然后摁 键盘的delete删除原有的源...原创 2022-04-30 22:14:46 · 5471 阅读 · 0 评论 -
GStreamer在Unbutu和Windows的编译使用细节
一、GStreamer简介:GStreamer 是用来构建流媒体应用的开源多媒体框架(framework),其目标是要简化音/视频应用程序的开发,已经能够被用来处理像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime等多种格式的多媒体数据。当前项目是尝试用它来开发多路RTSP推流服务器。二、GStreamer 在Ubuntu编译安装:第一步:sudo apt-get -y install python3.6-dev第二步:pip install ...原创 2022-04-30 21:51:43 · 904 阅读 · 0 评论 -
Gstreamer应用开发实战指南(二)
一、什么是GStreamer? GStreamer 是一个用于创建流媒体应用程序的框架。基本设计来自俄勒冈研究生院的视频管道,以及DirectShow的一些想法。 GStreamer的开发框架可以编写任何类型的流媒体多媒体应用程序。GStreamer 框架旨在使编写处理音频或视频或两者的应用程序变得容易。它不仅限于音频和视频,并且可以处理任何类型的数据流。管道设计使得比所施加的过滤器引起的开销要小。这使得GStreamer成为设计对延迟有很高要求的高端音频应用程序的良好框架。原创 2022-05-31 20:58:55 · 1069 阅读 · 0 评论 -
Gstreamer函数使用总结
1、GSteamer的基本API的使用2、创建元件并且链接起来3、添加衬垫,添加回调,手动链接衬垫4、打印gstreamer的版本信息5、gstreamer封装的argparse6、创建gst元件对象7、查看插件8、链接元件9、箱柜(箱柜本身是一个元件,但是它内部还可以是一串链接起来的元件)10、bus总线...原创 2022-06-28 22:37:44 · 3173 阅读 · 0 评论