`
yiheng
  • 浏览: 156626 次
社区版块
存档分类

基于leopardboard dm365的gstreamer框架实现的一些功能

阅读更多
一、TI在gstreamer体系下增加的插件
目录/opt/LeopardBoardDM365sdkEVAL2011Q2/proprietary/dvsdk-4_02_00_06/dvsdk/gstreamer-ti_svnr919/src
x(代表c,h)


gstticodecplugin.c  主要是注册TI提供的插件


1、插件代码:
音频解码插件 gsttiauddec1.x
音频编码插件 gsttiaudenc1.x
色彩空间转换加速器插件 gsttic6xcolorspace.x
显示插件 gsttidisplaysink2.x
用来捕获管道性能的数据的插件 gsttidmaiperf.x
video输出插件 gsttidmaivideosink.x
JPEG图像解码插件 gsttiimgdec1.x
JPEG图像编码插件 gsttiimgenc1.x
解码器插件TIViddec2 gsttividdec2.x
编码器插件TIVidenc1 gsttividdenc1.x
视频帧缩放插件 gsttividresize.x


2、一些全局定义:
定义:使用DMAI实现一个循环缓存区 gstticircbuffer.x
定义:提供一个查询平台提供到
编解码器信息到函数体 gstticodecs.x
定义:包含所有elements通用函数结构gstticommonutils.x
定义:实现把一个已经存在到DMAI缓存区
放到gstreamer缓存区,
以便给pipeline使用 gsttidmaibuffertransport.x
定义一些用来解码的函数和参数信息 gsttiquicktime_xxxx.x
3、参数定义:
特定型号芯片的配置参数,
包括插件默认的参数,
需要链接的文件的路径等 gstticodecplugin_dmxxx.cfg
xxxx平台编解码器的信息(名称) gstticodecs_xxxx.c
为TIVidenc插件准备GstBuffer
的插件,主要是把内存复制到
连续的物理缓存 gsttiprepencbuf.x


二、gstreamer体系的代码
目录/opt/LeopardBoardDM365sdkEVAL2011Q2/proprietary/gst-dmai-plugins/src/src
x(代表c,h)


  注册插件、提供主要函数 gstticodecplugin 
1、插件
dmaiaccel插件,
把gst缓存转换成dmai缓存(可能时)
或者仅仅复制数据到dmai缓存 gsttidmaiaccel.x
dmaiperf插件,
用来捕获管道性能的数据的插件 gsttidmaiperf.x
通用的缩放插件 gsttidmairesizer.x
dmai视频输出接口插件 gsttidmaivideosink.x
priority插件,
修改了线程的优先级和调度 gsttipriority.x
2、一些全局定义:
特定型号芯片的配置参数,
包括插件默认的参数,
需要链接的文件的路径等 dmxxx.cfg
定义:各种分辨率,视频格式的支持能力 cap.x
定义:音频编解码器到调用接口 gsttiauddec.x
定义:包含所有elements通用的
函数、结构 gstticommonutils.x
定义:实现把一个已经存在到DMAI缓存区
放到gstreamer缓存区,
以便给pipeline使用 gsttidmaibuffertransport.x
定义:DMAI基础上的通用解码器插件 gsttidmaidec.x
定义:DMAI基础上的通用编码器插件 gsttidmaienc.x


3、参数定义:
提供通用的图像解码器接口 gsttiimgdec.x
提供通用的图像编码器接口 gsttiimgenc.x
解析xxx文件格式的文件 gsttisupport_xxx.x
提供通用的视频解码器接口 gsttividdec.x
提供通用的视频编码器接口 gsttividenc.x
提供给所有插件使用的各分辨率参数 ittiam_caps.x
提供通用编解码器属性 ittiam_encoders.x
提供大部分TI编解码器属性 ti_encoders.x


三、目录/opt/LeopardBoardDM365sdkEVAL2011Q2/fs/apps
在这个目录,包含了gstreamer的主框架,和基本插件。

四、各插件参数


1、v4l2src参数:
默认使用的输入设备定义为:#define DEFAULT_PROP_DEVICE   "/dev/video0"
queue-size:streaming模式下驱动中缓存到数量,最小1,最大16,默认size=2,
always-copy:缓存区是否可以直接被mmap使用,默认true
input-src:选择输入源,默认留空,好像也不可以设置
chain-ipipe:使用ipipe工具链,会调用resizer,previewer驱动,默认true
force-720p-30:强制驱动工作在720p-30fps模式,默认false,leopard不支持此设置
num-buffers:输出缓存区的数量,录像时用到,决定录像文件的大小和时间长度。
2、dmaiaccel插件,
把gst缓存转换成dmai缓存(如果有必要),或者仅仅复制数据到dmai缓存,应该所用来加快速度的
   调用v4l2src之后,需要设置输出参数


3、dmaiperf插件,
提升管道的性能,数据处理速度。
engine-name:引擎名字,比如decode,encode
print-arm-load:打印cpu加载信息,默认false
4、TIDmaiVideoSink插件,
视频显示输出,
sync:时钟到同步标志
accelFrameCopy:使用硬件加速,拷贝视频帧,默认true
videoOutput:输出设备,SVIDEO,COMPOSITE,COMPONENT,DVI,LCD,AUTO
videoStd:视频格式,D1_NTSC,D1_PAL, 480P, 576P, 720P_60, 720P_50, 等


enable-last-buffer:使能最后一帧特性


5、dmaienc_h264插件
实现对数据进行h264格式的编码
encodingpreset:使用编码预置算法到类型,
0:默认,1:高质量,2:高速度,3:使用外部定义的参数
ratecontrol:使用速率控制算法,
1:恒定比特率CBR,适用视频会议
2:可变比特率,适合存储
3:通过非实时应用切换使用两种控制
4:不使用速率控制算法
5:用户定义的外部参数
intraframeinterval:内部连续的两帧之间的间隔
0:仅第一个I帧跟随所有P帧
1:无内部帧
2:连续IP序列(如果无B帧)
N:(n-1) P序列在I帧之间
idrinterval:两个连续的IDR帧间的间隔,0--2147483647,默认0
targetbitrate:目标比特率,1000-2000 0000,默认600 0000
outputBufferSize:输出缓存区大小,0 - 2147483647 Default: 0


6、qtmux多路复用器


7、queue简单的数据队列


8、rtph264pay


五、实现一些功能的常用
1、canera(mt9p031)输入,经过dmai缓存,加速,composite输出D1_NTSC
gst-launch -e v4l2src chain-ipipe=true always-copy=false  \
! dmaiaccel \
! video/x-raw-yuv,format=\(fourcc\)NV12, width=640, height=480, framerate=\(fraction\)30/1 \
!dmaiperf \
! TIDmaiVideoSink sync=false accelFrameCopy=false videoOutput=composite videoStd=D1_NTSC sync=false enable-last-buffer=false&


2、canera(mt9p031)输入,经过dmai缓存,加速,h264编码,保存到文件,mp4格式


gst-launch -e v4l2src always-copy=true chain-ipipe=true num-buffers=200 \
! 'video/x-raw-yuv,format=(fourcc)NV12,width=640,height=480' \
! dmaiaccel \
! dmaienc_h264 encodingpreset=2 ratecontrol=2 intraframeinterval=23 idrinterval=46 targetbitrate=6000000 \
! dmaiperf \
! qtmux \
! filesink location=test01.mp4 sync=false enable-last-buffer=false&


3、camera输入,打包成ts流,udp方式发送到网络


gst-launch -e v4l2src chain-ipipe=true always-copy=FALSE \
! 'video/x-raw-yuv,format=(fourcc)NV12,width=640,height=480,framerate=(fraction)30/1' \
! queue \
! dmaiaccel \
! dmaienc_h264 encodingpreset=2 targetbitrate=600000 maxbitrate=5000000 intraframeinterval=25 \
 outputBufferSize=5000000 ratecontrol=2 headers=true \
! dmaiperf print-arm-load=true \
! mpegtsmux \
! udpsink ts-offset = 100000000 port=1234 host=227.1.1.1 enable-last-buffer=false sync=true &
注:参数说明
1) width 640 800 1024 1280 1280 1600 1920 2048 2176
height 480 600 768 720 1024 1200 1080 1536 1944
framerate (30或60)/1 65/1 47/1 (45或23)/1 42/1 31/1 31/1 21/1 14/1
以上参数要一一对应
2)ts-offset参数与udp输出的fps和cpu使用率成反比
3)ratecontrol速率控制算法也影响udp输出的fps和cpu使用率
4)targetbitrate增大也会增加cpu到使用率
分享到:
评论

相关推荐

    基于Gstreamer框架的smooth streaming协议的插件开发

    基于GStreamer框架的Smooth Streaming插件开发是一项针对流媒体传输的高级技术实践。GStreamer是一个强大的开源多媒体处理框架,它允许开发者构建复杂的多媒体处理管道,支持多种媒体格式和协议,包括但不限于视频...

    Linux下开发的基于Gstreamer框架的播放器

    本播放器是在Linux操作系统下开发的基于Gstreamer框架的流媒体播放器,现阶段仅仅实现了基本功能,如:播放,快进,快退,暂停,停止。

    GStreamer框架

    这个框架的核心设计理念是基于管道的概念,允许开发者通过连接各种插件来实现复杂的媒体处理任务,如编码、解码、转换、播放等。 GStreamer的核心组件包括: 1. **Pipeline**:GStreamer中的管道是数据流处理的...

    基于DM365的高清视频编码传输系统的设计

    同时,利用开源的视频处理框架如Gstreamer或FFmpeg,可以方便地实现视频编码、解码、传输等功能。 总的来说,基于DM365的高清视频编码传输系统设计,结合了先进的硬件平台和成熟的软件环境,为高清视频在网络中的...

    基于 qt的gstreamer 应用,

    **基于Qt的GStreamer应用详解** GStreamer是一个强大的开源多媒体框架,它允许开发人员构建复杂的音频和视频处理流水线。而Qt则是一个流行的C++图形用户界面库,用于跨平台应用开发。将GStreamer与Qt结合,可以创建...

    Qt+gstreamer 视频播放器

    - **媒体处理能力**:除了基本的播放功能,GStreamer还可以实现流媒体播放、视频编辑、网络传输等功能。 3. **视频播放器功能**: - **进度拖动**:通过GStreamer的seeking接口,实现了视频播放进度的即时调整,...

    基于TMS320DM365平台的智能多媒体系统的设计与实现

    - 开发了TMS320DM365平台上的GStreamer插件,并设计实现了一个能够播放AVI文件的功能完善的多媒体播放子系统。 #### 四、测试与总结 - 对整个系统进行了全面的测试,验证了各个模块的功能是否正常,以及系统的...

    cpp-一系列GStreamer元素以在GStreamer框架中启用基于CNN模型的视频分析功能如对象检测分类识别

    This repository contains a collection of GStreamer* elements to enable CNN model based video analytics capabilities (such as object detection, classification, recognition) in GStreamer* framework.

    GStreamer+插件开发指南.pdf

    GStreamer 是一个功能强大且通用的框架,旨在创建流媒体应用程序。该框架的模块性使得它可以无缝接纳新的插件模块,但是这也带来了极高的复杂性。为帮助开发者了解 GStreamer 框架和开发新的插件,本手册将详细介绍 ...

    基于gstreamer的MP3播放器开发

    GStreamer作为一款功能强大的开源多媒体框架,在多媒体领域中具有重要的地位。它不仅简化了多媒体应用程序的开发流程,还通过其灵活的插件系统使得开发者可以根据具体需求定制自己的应用。本文将详细介绍如何利用...

    GStreamer小白入门

    GStreamer 入门指南 GStreamer 是一个跨平台的多媒体框架,支持 Windows、Linux、Android、iOS 等...GStreamer 是一个功能强大、灵活、跨平台的多媒体框架,具有广泛的应用前景,但也存在一些学习成本和复杂度问题。

    【GStreamer】利用GStreamer实现mp4格式视频播放

    Linux平台C语言利用GStreamer实现mp4格式视频播放代码,包括管道配置,连接,以及动态连接element的pad。难点:demux控件通过回调方式进行音视频的分流,连接解码器、sink输出。

    gstreamer实现截屏

    运用gstreamer可以实现电脑截屏功能,大家可以更改参数,截取指定位置的屏幕。

    kaldi-gstreamer-server:基于Kaldi工具包和GStreamer框架的实时全双工语音识别服务器

    这是基于Kaldi工具包和GStreamer框架并以Python实现的实时全双工实时语音识别服务器。 广告 塔林工业大学正在寻找一名从事语音识别的博士生,重点是轻度代码转换的语音(例如,芬兰语包含很多英语技术术语)。 。 ...

    Kurento 是一个 WebRTC 流媒体服务器以及一些客户端API,基于GStreamer的低级技术实现,以优化资源消耗

    它以基于GStreamer的低级技术实现,以优化资源消耗。它提供以下功能:网络流协议,包括HTTP,RTP和WebRTC。支持媒体混合和媒体路由/调度的组通信(MCU 和 SFU 功能)。 对计算视觉和增强现实过滤器的通用支持。媒体...

    GStreamer+开发手册.pdf

    本手册还将指导您如何开发一个简单的音频播放器和媒体播放控制的高级问题,并提供了一些有用的技巧和建议,以帮助您更好地理解 GStreamer 框架和开发一个基于 GStreamer 的应用程序。 GStreamer 的应用前景 ...

    gstreamer中tee如何实现可控录像(预览+截图+录像)

    在GStreamer框架中,`tee`元素是一种分发器,它可以将输入的媒体流复制到多个下游元素,而不会丢失任何数据。这对于同时执行多种处理任务,如预览、截图和录像,非常有用。在本场景中,我们将探讨如何利用GStreamer...

    GStreamer中文开发手册.zip

    GStreamer是一个通用的跨平台的流媒体应用程序框架,基于GObject,以C语言写成。... GStreamer框架是基于插件(plugin)和管道(pipeline)的体系结构,框架中所有功能模块都是可插拔的组件,可随意安装到任意管道上

    gstreamer源码

    gstreamer源码

Global site tag (gtag.js) - Google Analytics