gstream初次尝试
文章目录
- 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初次尝试相关推荐
- Redis 初次尝试
Redis 初次尝试 第一次接触redis,也不知道要写些什么.就玩了下将redis列表中的数据存入mysql数据库中. 首先有三个文件: redis.php 添加数据进redis: insert_c ...
- 初次尝试python爬虫,爬取小说网站的小说。
本次是小阿鹏,第一次通过python爬虫去爬一个小说网站的小说. 下面直接上菜. 1.首先我需要导入相应的包,这里我采用了第三方模块的架包,requests.requests是python实现的简单易 ...
- 初次尝试使用Windbg调试Sql Server 进程
最近看了吕海波大牛的书,和相关资料:决定尝试一下使用Windbg调试Sql Server 进程:当然是入门级的: 看了吕海波老师的书终于明白一个道理,原来数据库系统的内核(内存)中,就是各种链表: 大 ...
- oracle创建编号函数,oracle函数初次尝试
初次着手写function,确实费了好长时间,一个if就需要有个end if ,并且else必须和if一起使用,可以直接对传进来的参数使用oracle自带的函数进行处理,并直接做做判断条件. 需求根 ...
- java解析html之HTMLparser初次尝试
为了爬取一个网页的数据,尝试了一下Htmlparser来做小爬虫. 下面是一个小案例,用来爬取论坛的帖子内容. 1. HtmlParser 简介 htmlparser是一个纯的java写的html解析 ...
- PowerApps共享应用(初次尝试)
1.登录PowerApps平台,点击"应用" 2.选中需要共享的应用,点击"共享" 3.点击完成显示的界面 4.搜索需要共享应用的用户 5.点击搜索的用户信息 ...
- 初次尝试ESP8266带CH340串口开发板踩过的坑
文章目录 前言 踩坑记录 1.CH340驱动安装失败原因竟在microUSB数据线 2.microPython固件刷写闹笑话 3.Python版本与windows开发环境的秘密 4.毫无用处的配置工具 ...
- 华为云mysql怎么玩_初次尝试华为云
最近好多云服务商提供免费试用,活动力度蛮大的.可以尝试一下.活动地址 1.参与限制:从未体验过华为云云产品的用户,包括未购买过包年包月包天产品.未购买活动套餐.未开通过按量付费产品的用户: 2.活动时 ...
- 【GPU精粹系列还原】GPU Pro7_II_4 实时体积云(初次尝试)
尝试还原了地平线的体积云,还有很多地方需要改进 细节部分请去读原书,这里主要对书中一带而过的部分做一下补充 关于Density-Height Functions 这里我的做法是用Sin苟 fixed4 ...
- 初次尝试使用IDAPro修改程序控制流程
先用VC6写一个简单程序: 如果在输入框输入 ABCdef ,单击按钮则弹出"密码正确",否则弹出"密码错误": 用IDAPro打开此exe:打开时有一些打开选 ...
最新文章
- linux windows c system 函数简介
- 2021 年 5 月中国编程语言排行榜,C++ 超过 Java 没戏了...
- python转行it好学吗-想转行学python过来人提醒大家几点
- java 手机 上传图片_在手机端使用拍照功能上传图片的功能的解决文案
- 布隆过滤器(Bloom Filter)- 原理、实现和推导
- 心音与心电信号分析之一--6.26--心音信号检测系统软件设计
- 游戏开发 cocosBuilder cocosCreator cocosPods
- easyPOI 模板导出Excel
- 怎么关闭计算机139端口,win10系统关闭139端口的处理教程
- 服务器vga连接笔记本显示器,为什么用vga线链接笔记本和显示器,显示器的画质根本没法直视...
- 打卡day01 python基础—常用数据类型
- Optimal Rough Terrain Trajectory Generation for Wheeled Mobile Robots 论文阅读笔记
- EDA程序设计--数字日历电路
- 【工具分享篇二】PDF公式提取教程(一):Mathpix/Typora及Pandoc扩展安装教程
- 中科曙光 量子计算机,中科曙光 量子计算机 量子计算机的曙光
- python调用谷歌翻译Googletrans接口
- 程序设计文档编写_编写有效的设计系统文档的6个技巧
- 逆向微信Mac客户端:微信情话助手初版
- Mysql基础篇-23-触发器Tigger
- 有关meta learning 要读的论文清单