GStreamer 概要

整个博客有价值
Gstreamer翻译文章

零碎

1、通过一个fakesrc工厂对象来创建一个名叫source的元件,element = gst_element_factory_make ("fakesrc", "source");
2、ghost pads:创建出来备用,等需要的时候,他顶上去充当src pad
1、pipeline串联plugins(element基于GObject)
2、上层应用---中层管理Core Framework---下层plugins
sinks 负责将媒体流输出到指定的位置,alsa,xvideo,tcp/udp等
Formats:负责媒体容器的处理,avi,mp4,ogg等。
Codecs:负责媒体的编解码,mp3,vorbis等。
Filters:负责媒体流的处理,converters,mixers,effects等。
3、各种概念
	1)一个element实现一个功能
	2)pad是element的输入输出接口 sink入,src出
	3)bin是element的容器,用于管理多个element
 简单流程例子:filesrc读取文件,解析文件,提取所需数据,缓存数据到queue,解码,播放

4、Gstreamer数据消息交互
	1)Bus 是application和pipeline(plugins)之间的消息传递管理中心
	2) Buffers 是在pipeline中 src到sink之间的数据传输
	3)Events 是既能插件插件之间,也能插件和应用之间
	4)Messages 插件---bus---application处理,通常用于传递errors, tags, state changes, buffering state, redirects等消息
	5)Queries 查询,查询时间,文件大小等信息

媒体类型与Pad
	1、Pad通过Pad Caps来过滤数据,比如分辨率,format,fps,采样率,位宽等
	2、Pad Templates包含了所有Pad支持的Caps
	3、Pad的有效性:
		Always---初始化就存在的Pad
		Sometimes---常见于文件格式解析器
		On request---常见于合并或生成多路数据 比如tee 
	当我们需要将同一路视频流同时进行显示和存储,这时候就要用到tee.

动态链接pipeline
	1、常见媒体,音频和视频包含在同一文件中,播放时,用分离器(demuxer)分离出来,有时可能是一路视频,两路音频
	2、动态链接就是通过GSignals得到信号后再链接的技法
	3、GStreamer的状态,死顺序
		NULL:NULL状态是所有Element被创建后的初始状态。
		READY:READY状态表明GStreamer已经完成所需资源的检查,可以进入PAUSED状态。
		PAUSED:Element处于暂停状态,表明其可以开始接收数据。Sink Element在接收了一个buffer后就会进入等待状态。
		PLAYING:Element处于播放状态,时钟处于运行中,数据被依次处理。

GStreamer查询机制
	查询当前的播放速率,产生的延迟,是否支持跳转(seeking)等

获取媒体信息---元数据相关
	1、元数据---流标签:歌手,专辑
							流信息:编码类型,分辨率,采样率等
	2、只需要提取相应的媒体信息,不需要具体的数据,用fakesink

07播放速度控制
	1、playbin uri=file:///home/ 本地

08实现pipeline在单独的线程中执行
	tee,queue都是Element
	1、tee将数据分为两路,queue为其创建单独的线程。queue也被用于数据缓冲
  2、通过queue让Pipeline运行在多个线程上

09
	1、通过appsrc向Pipeline中写入数据
	2、通过appsink取得Pipeline中的数据
	3、获取/填充GstBuffer中对应的数据	

10 在线播放Online Streaming
	网络问题导致的视频缓冲,时钟丢失的问题
  1、(收到马上就给不好)就是存一部分再给,虽然延迟,但是流畅
	2、数据不足时,主动暂停,够了再PLAYING,GStreamer会自动选取参考时钟进行音视频同步[解决时钟丢失问题]

11 与QT集成
	1、指定GStreamer将视频输出到指定窗口
	2、利用GStreamer上报的信息去更新GUI.

12 常用命令工具
	1、用于快速查看信息,验证pipeline是否能正确运行,先验证再将pipeline集成到应用中
	2、查看都包含哪些Element,查看这些Element,
	3、查看媒体文件的编码和帧率
	4、Caps Filter表现为一个只接收指定数据类型的Element

13 调试---日志,关系图

你可能感兴趣的:(gstreamer)