编写gstreamill的job文件

Gstreamill是基于gstreamer的编码器,具体的编码任务采用json格式的job文件描述,json格式的job文件编写的基础是对于gstreamer基本概念的理解,本文只介绍job文件的结构,并不介绍gstreamer的相关概念。

如下是一个job文件的总体结构:
{
    "name" :"cctv2",
    "debug" :"3",
   "source" : {
       ...
    },
   "encoders" : [
       ...
    ],
   "m3u8streaming" : {
       ...
    }
}

name是job的名字,必须有
debug是log级别,具体含义参照gstreamer的log级别及使用方法,这个field是可选的。
source是编码器源的描述,必须有。
encoders是编码器的描述,必须有。
m3u8streaming是对于hls的支持,可选。

source的结构如下:
    "source" : {
        "elements" : {
            ...
        },
        "bins" : [
            ...
        ]
    }
elements描述gstreamerelement的具体参数,这些被描述了具体参数的element将用于bins中的bin。
bins描述若干gstreamer bin,这些bin构成source pipeline,sourcepipeline就是编码器的源。

elements的结构如下:
        "elements" : {
            "udpsrc" :{
                "property" : {
                    "uri" : "udp://127.0.0.1:6003"
                }
            },
            "appsink": {
                "property" : {
                    "sync" : false,
                    "drop" : true
                }
            }
这里的elements描述了两个element,分别是udpsrc和appsink,udpsrc和appsink都是gstreamer的element,利用gst-inspect命令可以看到gstreamer的element的具体描述。

bins的结构如下:
        "bins" : [
            "udpsrc !queue ! tsdemux name=demuxer",
            "demuxer.video ! queue ! mpeg2dec ! queue ! appsink name =video",
            "demuxer.audio ! mpegaudioparse ! queue ! mad ! queue ! appsinkname = audio"
        ]
这里描述了三个bin,这里的bin的语法与gst-launch中的语法一致,其中appsink结束的bin的输出就是source的源,必须给出appsink的name属性,作用是与encoders中的bin的输入对应起来。

如下是编码器的结构:
    "encoders" : [
        {
            "elements": {
                ...
            },
            "bins" :[
                ...
            ],
            "udpstreaming" : "127.0.0.1:12345"
        },
        {
            "elements": {
                ...
            },
            "bins" :[
                ...
            ],
            "udpstreaming" : "127.0.0.1:22345"
        }
    ],

encoders是array类型的,由多个encoder组成,每个encoder对应一个编码输出。
encoders中的elements与source中的elements作用是一致的,
encoders中的bins与source中bins类似,不同之处在于,encoders的bins中bin,有的是appsrc开头的,且必须有name属性,name的值一定与source中的某个appsink的name属性值一致,也就是appsrc的输入来自对应的appsink的输出。
encoders中的udpstreaming用于指明该encoder是否有udp输出。

m3u8streaming的结构如下,用于定义encoders的hls输出,是可选项:

    "m3u8streaming" :{
        "version" : 3,
        "window-size" : 4,
        "segment-duration" : 10.00
    }

我的更多文章:
  • 开源编码器gstreamill的使用(2013-12-25 17:30:13)
  • 理解Gstreamer架构(2011-03-14 18:03:15)
  • gstreamer中的调度模式(2011-03-10 09:29:56)
转载自:http://blog.sina.com.cn/s/blog_6a4c492f0101d2ii.html

你可能感兴趣的:(编写gstreamill的job文件)