Gstreamill是基于gstreamer的编码器,具体的编码任务采用json格式的job文件描述,json格式的job文件编写的基础是对于gstreamer基本概念的理解,本文只介绍job文件的结构,并不介绍gstreamer的相关概念。
"name" :"cctv2",
"debug" :"3",
"source" : {
...
},
"encoders" : [
...
],
"m3u8streaming" : {
...
}
"source" : {
"elements" : {
...
},
"bins" : [
...
]
}
"elements" : {
"udpsrc" :{
"property" : {
"uri" : "udp://127.0.0.1:6003"
}
},
"appsink": {
"property" : {
"sync" : false,
"drop" : true
}
}
"bins" : [
"udpsrc !queue ! tsdemux name=demuxer",
"demuxer.video ! queue ! mpeg2dec ! queue ! appsink name =video",
"demuxer.audio ! mpegaudioparse ! queue ! mad ! queue ! appsinkname = audio"
]
"encoders" : [
{
"elements": {
...
},
"bins" :[
...
],
"udpstreaming" : "127.0.0.1:12345"
},
{
"elements": {
...
},
"bins" :[
...
],
"udpstreaming" : "127.0.0.1:22345"
}
],
"m3u8streaming" :{
"version" : 3,
"window-size" : 4,
"segment-duration" : 10.00
}
如下是一个job文件的总体结构:
{
}
name是job的名字,必须有
debug是log级别,具体含义参照gstreamer的log级别及使用方法,这个field是可选的。
source是编码器源的描述,必须有。
encoders是编码器的描述,必须有。
m3u8streaming是对于hls的支持,可选。
source的结构如下:
elements描述gstreamerelement的具体参数,这些被描述了具体参数的element将用于bins中的bin。
bins描述若干gstreamer bin,这些bin构成source pipeline,sourcepipeline就是编码器的源。
elements的结构如下:
这里的elements描述了两个element,分别是udpsrc和appsink,udpsrc和appsink都是gstreamer的element,利用gst-inspect命令可以看到gstreamer的element的具体描述。
bins的结构如下:
这里描述了三个bin,这里的bin的语法与gst-launch中的语法一致,其中appsink结束的bin的输出就是source的源,必须给出appsink的name属性,作用是与encoders中的bin的输入对应起来。
如下是编码器的结构:
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输出,是可选项:
我的更多文章:
- (2013-12-25 17:30:13)
- (2011-03-14 18:03:15)
- (2011-03-10 09:29:56)