文章目录

  • 1.导入gstream
  • 2.连接的回调函数
  • 3.创建管道和元件
  • 4 元件连接
  • 5 设置管道的状态
  • 6 补充1

1.导入gstream

导入gstream
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GObject, GLib
Gst.init(None)

2.连接的回调函数

随机衬垫的回调函数
def on_pad_added( src, pad, des):vpad = des.get_static_pad("sink")  # 获取后续元件的接收衬垫pad.link(vpad)  # 源元件的新产生的随机衬垫和后续元件衬垫连接

`查看衬垫属性
gst-inspect-1.0 | grep 衬垫名 rtspsrc
gst-inspect-1.0 衬垫名 查看衬垫的具体信息
Pad Templates: 衬垫模板
SRC template: ‘subtitle_%u’ 源衬垫
Availability: Sometimes 类型 随机衬垫 用回调函数连接元件
Capabilities:
ANY
SINK template: ‘sink’ 接收衬垫
Availability: Always 类型 永久衬垫 pipe.link()直接连接
Capabilities:
video/quicktime
video/mj2
audio/x-m4a
application/x-3gp
注意:除了永久衬垫,随机衬垫 还有 request衬垫(请求衬垫),连接时也需要使用回调函数


def cb_decodebin_newpad(src, pad, dst):caps = Gst.Pad.get_current_caps(pad)structure_name = caps.to_string()if structure_name.startswith("video"):videorate_pad = dst.get_static_pad("sink")pad.link(videorate_pad)def cb_audiodecode_newpad(src, pad, dst):caps = Gst.Pad.get_current_caps(pad)structure_name = caps.to_string()if structure_name.startswith("audio"):volume_pad = dst.get_static_pad("sink")pad.link(volume_pad) 

3.创建管道和元件

# 管道
pipe = Gst.Pipeline.new('test')
# 源元件
srcv = Gst.ElementFactory.make('rtspsrc', 'srcv')
srca = Gst.ElementFactory.make('rtspsrc', 'srca')
# 解封装元件
depayv = Gst.ElementFactory.make('rtph264depay', 'depayv')
depaya = Gst.ElementFactory.make('rtppcmadepay', 'depaya')
# 缓存元件
queuev = Gst.ElementFactory.make('queue2', 'queuev')
queuea = Gst.ElementFactory.make('queue2', 'queuea')
# src的属性是rtspsrc  的SRC是sometime 使用回调函数
srcv.connect('pad-added', on_pad_added, queuev)
srca.connect('pad-added', on_pad_added, queuea)
# 转换元件  可以设置属性
conv = Gst.ElementFactory.make("videoconvert", "conv")
cona = Gst.ElementFactory.make("audioconvert", "cona")
# 接受元件
sinkv = Gst.ElementFactory.make("xvimagesink", "sinkv")
sinka = Gst.ElementFactory.make("autoaudiosink", "sinka")
# 解解码元件
decodebinv = Gst.ElementFactory.make("avdec_h264", "decodev")
decodebina = Gst.ElementFactory.make("decodebin", "decodea")
decodebina.connect("pad-added", cb_audiodecode_newpad, cona)
# rtsp视频接入的相机
rstp = 'rtsp://admin:xxxxxx@xxxxxx/Streaming/channels/802'
srcv.set_property("location", rstp)
srca.set_property("location", rstp)

4 元件连接

1 将元件添加到管道

elementsv = [queuev, depayv, decodebinv, conv, sinkv]
elementsa = [queuea, depaya, decodebina, cona, sinka]pipe.add(srcv)
pipe.add(srca)for element in elementsv:pipe.add(element)
for element in elementsa:pipe.add(element)

2.元件在管道里面连接

for i in range(len(elementsv) - 1):elementsv[i].link(elementsv[i + 1])
for i in range(len(elementsa) - 1):elementsa[i].link(elementsa[i + 1])

5 设置管道的状态

pipe.set_state(Gst.State.PLAYING)mainloop = GLib.MainLoop()
mainloop.run()

6 补充1

 vmuxpad = muxer.get_request_pad("video_%u")  # 获得视频流的请求衬垫vsrcpad = vfilter.get_static_pad("src")          # 获得过滤元件的src衬垫vsrcpad.link(vmuxpad)                         # 过滤元件(vmuxpad)和封装元件(vsrcpad)链接

matroskamux  sink   类型  request
src 类型 Always

gstream初次尝试相关推荐

  1. Redis 初次尝试

    Redis 初次尝试 第一次接触redis,也不知道要写些什么.就玩了下将redis列表中的数据存入mysql数据库中. 首先有三个文件: redis.php 添加数据进redis: insert_c ...

  2. 初次尝试python爬虫,爬取小说网站的小说。

    本次是小阿鹏,第一次通过python爬虫去爬一个小说网站的小说. 下面直接上菜. 1.首先我需要导入相应的包,这里我采用了第三方模块的架包,requests.requests是python实现的简单易 ...

  3. 初次尝试使用Windbg调试Sql Server 进程

    最近看了吕海波大牛的书,和相关资料:决定尝试一下使用Windbg调试Sql Server 进程:当然是入门级的: 看了吕海波老师的书终于明白一个道理,原来数据库系统的内核(内存)中,就是各种链表: 大 ...

  4. oracle创建编号函数,oracle函数初次尝试

    初次着手写function,确实费了好长时间,一个if就需要有个end  if ,并且else必须和if一起使用,可以直接对传进来的参数使用oracle自带的函数进行处理,并直接做做判断条件. 需求根 ...

  5. java解析html之HTMLparser初次尝试

    为了爬取一个网页的数据,尝试了一下Htmlparser来做小爬虫. 下面是一个小案例,用来爬取论坛的帖子内容. 1. HtmlParser 简介 htmlparser是一个纯的java写的html解析 ...

  6. PowerApps共享应用(初次尝试)

    1.登录PowerApps平台,点击"应用" 2.选中需要共享的应用,点击"共享" 3.点击完成显示的界面 4.搜索需要共享应用的用户 5.点击搜索的用户信息 ...

  7. 初次尝试ESP8266带CH340串口开发板踩过的坑

    文章目录 前言 踩坑记录 1.CH340驱动安装失败原因竟在microUSB数据线 2.microPython固件刷写闹笑话 3.Python版本与windows开发环境的秘密 4.毫无用处的配置工具 ...

  8. 华为云mysql怎么玩_初次尝试华为云

    最近好多云服务商提供免费试用,活动力度蛮大的.可以尝试一下.活动地址 1.参与限制:从未体验过华为云云产品的用户,包括未购买过包年包月包天产品.未购买活动套餐.未开通过按量付费产品的用户: 2.活动时 ...

  9. 【GPU精粹系列还原】GPU Pro7_II_4 实时体积云(初次尝试)

    尝试还原了地平线的体积云,还有很多地方需要改进 细节部分请去读原书,这里主要对书中一带而过的部分做一下补充 关于Density-Height Functions 这里我的做法是用Sin苟 fixed4 ...

  10. 初次尝试使用IDAPro修改程序控制流程

    先用VC6写一个简单程序: 如果在输入框输入 ABCdef ,单击按钮则弹出"密码正确",否则弹出"密码错误": 用IDAPro打开此exe:打开时有一些打开选 ...

最新文章

  1. linux windows c system 函数简介
  2. 2021 年 5 月中国编程语言排行榜,C++ 超过 Java 没戏了...
  3. python转行it好学吗-想转行学python过来人提醒大家几点
  4. java 手机 上传图片_在手机端使用拍照功能上传图片的功能的解决文案
  5. 布隆过滤器(Bloom Filter)- 原理、实现和推导
  6. 心音与心电信号分析之一--6.26--心音信号检测系统软件设计
  7. 游戏开发 cocosBuilder cocosCreator cocosPods
  8. easyPOI 模板导出Excel
  9. 怎么关闭计算机139端口,win10系统关闭139端口的处理教程
  10. 服务器vga连接笔记本显示器,为什么用vga线链接笔记本和显示器,显示器的画质根本没法直视...
  11. 打卡day01 python基础—常用数据类型
  12. Optimal Rough Terrain Trajectory Generation for Wheeled Mobile Robots 论文阅读笔记
  13. EDA程序设计--数字日历电路
  14. 【工具分享篇二】PDF公式提取教程(一):Mathpix/Typora及Pandoc扩展安装教程
  15. 中科曙光 量子计算机,中科曙光 量子计算机 量子计算机的曙光
  16. python调用谷歌翻译Googletrans接口
  17. 程序设计文档编写_编写有效的设计系统文档的6个技巧
  18. 逆向微信Mac客户端:微信情话助手初版
  19. Mysql基础篇-23-触发器Tigger
  20. 有关meta learning 要读的论文清单

热门文章

  1. 论文阅读笔记——拥塞控制算法PCC Vivace
  2. [Android]OkHttp的简单封装-辅助框架
  3. cmake使用介绍【转】
  4. js时间对象相关函数
  5. inner join 重复数据_pandas数据合并菜谱
  6. 保存用户数据到mysql_MySQL中所有用户信息都保存在【 】数据表中。
  7. 使用FileZilla搭建简单的FTP
  8. (1)I/O流对象-----FileInputStream与FileOutputStream
  9. sqlite3源码调试
  10. HDOJ_2006_求奇数的乘积