整个博客有价值
里面记述的功能:
1 调整视频大小分辨率
2 转码(视频格式转换)
3 udp--server/client
4 demux 分出音视频然后queue缓冲队列分别进行解码播放
5 查询机制:媒体的总时间,当前播放位置,跳转到指定位置
零碎
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等。比如timeoverlay,可以在视频数据中叠加一个时间字符串
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
开始的时候没有将uridecodebin(source,demuxer,decode)和convert(不同音频格式之间转换)连接,因为分成音视频两路走,你转换器要对应连接。所以需要等信号
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、gst-launch-1.0 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 调试---日志,关系图