searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享

GStreamer是什么?

2024-05-21 02:27:55
12
0

GStreamer是什么? GStramer是一个创建流媒体应用程序的框架。GStreamer的程序开发框架使得编写任意类型的流媒体应用程序成为了可能。GStreamer并不受限于音频和视频处理它能够处理任意类型的数据流。管道设计的方法对于实际应用的滤波器几乎没有负荷,它甚至可以用来设计出对延时有很高要求的高端音视频应用程序。

 

GStreamer最显著的用途是在构建一个播放器上, GStreamer已经支持很多格式的档了,包括: MP3、Ogg/Vorbis. MPEG-12、 AVI、 Quickime、 mod等等。从这个角度看, GStreamer更像是一个播放器。但是它主要的优点却是在于它的可插入组件能够很方便的接入到任意的管道当中。

 

GStreamer框架是基于插件的,有些插件中提供了各种各样的多媒体数字信号编译码器,也有些提供了其它的功能。所有的插件都能够被链接到任意的已经定义了的数据流管道中。

 

GStreamer框架的应用的简单分层:

 

 

Media Applications

 

最上面一层为应用,比如GStreamer自带的一些工具(gst-launch,gst-inspect等),以及基于GStreamer封装的库(gst-player,gst-rtsp-server,gst-editing-services等)根据不同场景实现的应用。

 

Core Framework 中间一层为Core Framework,主要提供:

 

  1. 上层应用所需接口

  2. Plugin的框架

  3. Pipline的框架

  4. 数据在各个Element间的传输及处理机制

  5. 多个媒体流(Streaming)间的同步(比如音视频同步)

  6. 其他各种所需的工具库

 

Plugins 最下层为各种插件,实现具体的数据处理及音视频输出,应用不需要关注插件的细节,会由Core Framework层负责插件的加载及管理。主要分类为:

 

1、Protocols:负责各种协议的处理,file,http,rtsp等。

 

2、Sources:负责数据源的处理,alsa,v4l2,tcp/udp等。

 

3、Formats:负责媒体容器的处理,avi,mp4,ogg等。

 

4、Codecs:负责媒体的编解码,mp3,vorbis等。

 

5、Filters:负责媒体流的处理,converters,mixers,effects等。

 

6、Sinks:负责媒体流输出到指定设备或目的地,alsa,xvideo,tcp/udp等。

 

7、GStreamer框架根据各个模块的成熟度以及所使用的开源协议,将core及plugins置于不同的源码包中:

 

GStreamer: 包含core framework及core elements。

 

gst-plugins-base: GStreamer应用所需的必要插件。

 

gst-plugins-good: 高质量的采用LGPL授权的插件。

 

gst-plugins-ugly: 高质量,但使用了GPL等其他授权方式的库的插件,比如使用GPL的x264,x265。

 

gst-plugins-bad: 质量有待提高的插件,成熟后可以移到good插件列表中。

 

gst-libav: 对libav封装,使其能在GStreamer框架中使用。

 

GStreamer的优点

 

  1. 结构清晰且威力强大:我们可以使用一系列强有利的工具来创建媒体管道,而不用去写一行代码,从而使得复杂的媒体控制变得非常简单。GStreamer 向插件提供了简洁而简单的API来创建self- plugin(自包含)插件,同时还集成了大量的调试和跟踪机制和工具。GStreamer也提供了一系列现实例子。

  2. 灵活的可扩展性能:所有的GStreamer对象都可以采用GObject继承的方法进行扩展。所有的插件都可以被动态装载。

  3. 高性能主要体现在:使用GLib的g_ mem_ chunk和非模块化分配算法使得内存分配尽可能最小。插件之间的连接非常轻型(light-weight).数据在管道中的传递使用最小的消耗,管道中插件之间的数据传递只会涉及指针废弃。提供了一套对目标内存直接进行操作的机制。例如,插件可以向X server共享的内存空间直接写数据,缓冲区也可以指向任意的内存,如声卡的内部硬件缓冲区。refcounting和写拷贝将memcpy减少到最低。子缓冲区有效地将缓冲区分离为易于管理的块。使用线程联合(cothreads)减少线程消耗。线程联合(cothreads)是简单又高速的方法来切换子程序,作为衡量最低消耗600个cpu周期的标准。使用特殊的插件从而支持硬件加速。采用带有说明的插件注册,这样的话只在实际需要使用该插件才会去装载。所有的判断数据都不用互斥锁。

 

 

  • End -
0条评论
0 / 1000
j****n
4文章数
0粉丝数
j****n
4 文章 | 0 粉丝
j****n
4文章数
0粉丝数
j****n
4 文章 | 0 粉丝

GStreamer是什么?

2024-05-21 02:27:55
12
0

GStreamer是什么? GStramer是一个创建流媒体应用程序的框架。GStreamer的程序开发框架使得编写任意类型的流媒体应用程序成为了可能。GStreamer并不受限于音频和视频处理它能够处理任意类型的数据流。管道设计的方法对于实际应用的滤波器几乎没有负荷,它甚至可以用来设计出对延时有很高要求的高端音视频应用程序。

 

GStreamer最显著的用途是在构建一个播放器上, GStreamer已经支持很多格式的档了,包括: MP3、Ogg/Vorbis. MPEG-12、 AVI、 Quickime、 mod等等。从这个角度看, GStreamer更像是一个播放器。但是它主要的优点却是在于它的可插入组件能够很方便的接入到任意的管道当中。

 

GStreamer框架是基于插件的,有些插件中提供了各种各样的多媒体数字信号编译码器,也有些提供了其它的功能。所有的插件都能够被链接到任意的已经定义了的数据流管道中。

 

GStreamer框架的应用的简单分层:

 

 

Media Applications

 

最上面一层为应用,比如GStreamer自带的一些工具(gst-launch,gst-inspect等),以及基于GStreamer封装的库(gst-player,gst-rtsp-server,gst-editing-services等)根据不同场景实现的应用。

 

Core Framework 中间一层为Core Framework,主要提供:

 

  1. 上层应用所需接口

  2. Plugin的框架

  3. Pipline的框架

  4. 数据在各个Element间的传输及处理机制

  5. 多个媒体流(Streaming)间的同步(比如音视频同步)

  6. 其他各种所需的工具库

 

Plugins 最下层为各种插件,实现具体的数据处理及音视频输出,应用不需要关注插件的细节,会由Core Framework层负责插件的加载及管理。主要分类为:

 

1、Protocols:负责各种协议的处理,file,http,rtsp等。

 

2、Sources:负责数据源的处理,alsa,v4l2,tcp/udp等。

 

3、Formats:负责媒体容器的处理,avi,mp4,ogg等。

 

4、Codecs:负责媒体的编解码,mp3,vorbis等。

 

5、Filters:负责媒体流的处理,converters,mixers,effects等。

 

6、Sinks:负责媒体流输出到指定设备或目的地,alsa,xvideo,tcp/udp等。

 

7、GStreamer框架根据各个模块的成熟度以及所使用的开源协议,将core及plugins置于不同的源码包中:

 

GStreamer: 包含core framework及core elements。

 

gst-plugins-base: GStreamer应用所需的必要插件。

 

gst-plugins-good: 高质量的采用LGPL授权的插件。

 

gst-plugins-ugly: 高质量,但使用了GPL等其他授权方式的库的插件,比如使用GPL的x264,x265。

 

gst-plugins-bad: 质量有待提高的插件,成熟后可以移到good插件列表中。

 

gst-libav: 对libav封装,使其能在GStreamer框架中使用。

 

GStreamer的优点

 

  1. 结构清晰且威力强大:我们可以使用一系列强有利的工具来创建媒体管道,而不用去写一行代码,从而使得复杂的媒体控制变得非常简单。GStreamer 向插件提供了简洁而简单的API来创建self- plugin(自包含)插件,同时还集成了大量的调试和跟踪机制和工具。GStreamer也提供了一系列现实例子。

  2. 灵活的可扩展性能:所有的GStreamer对象都可以采用GObject继承的方法进行扩展。所有的插件都可以被动态装载。

  3. 高性能主要体现在:使用GLib的g_ mem_ chunk和非模块化分配算法使得内存分配尽可能最小。插件之间的连接非常轻型(light-weight).数据在管道中的传递使用最小的消耗,管道中插件之间的数据传递只会涉及指针废弃。提供了一套对目标内存直接进行操作的机制。例如,插件可以向X server共享的内存空间直接写数据,缓冲区也可以指向任意的内存,如声卡的内部硬件缓冲区。refcounting和写拷贝将memcpy减少到最低。子缓冲区有效地将缓冲区分离为易于管理的块。使用线程联合(cothreads)减少线程消耗。线程联合(cothreads)是简单又高速的方法来切换子程序,作为衡量最低消耗600个cpu周期的标准。使用特殊的插件从而支持硬件加速。采用带有说明的插件注册,这样的话只在实际需要使用该插件才会去装载。所有的判断数据都不用互斥锁。

 

 

  • End -
文章来自个人专栏
x264
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0