# Intuduction

[![](https://img.shields.io/badge/Author-@RicardoLu-red.svg)](https://github.com/gesanqiu)![](https://img.shields.io/badge/Version-1.0.0-blue.svg)[![](https://img.shields.io/github/stars/gesanqiu/gstreamer-example.svg?style=social\&label=Stars)](https://github.com/gesanqiu/gstreamer-example)

[GStreamer](https://gstreamer.freedesktop.org/documentation/index.html?gi-language=c)是一个非常强大和通用的用于开发流媒体应用程序的框架。GStreamer框架的许多优点都来自于它的模块化：GStreamer可以无缝地合并新的插件模块，但是由于模块化和强大的功能往往以更大的复杂度为代价，开发新的应用程序并不总是简单。

出于以下两点原因，让我萌生了发起这个项目的想法：

* 网络上关于GStreamer的开发文档比较少，几乎只能依靠官方的[API Reference](https://gstreamer.freedesktop.org/documentation/libs.html?gi-language=c)和[Tutorials](https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=c)英文文档；
* 目前项目只有我一个人在维护，因此更多是出于我个人开发的学习记录，但欢迎各位的加入。

### 更新计划

#### 基础理论

本章节将介绍GStreamer的基本理论和[Gstreamer Core Library](https://gstreamer.freedesktop.org/documentation/gstreamer/gi-index.html?gi-language=c)中最常用的部分数据结构及其相关API，并且完成所有[Tutorial](https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=c)的翻译。

#### 应用开发

本章节将结合我的开发经历，讲解使用GStreamer开发一个视频流应用会需要用到的基础技术。

* [x] 构建pipeline的两种方式：`gst_parse_launch()`和`gst_element_factory_make()`
* [x] uridecodebin详解
* [x] appsink/appsrc
* [ ] GstBufferPool
* [x] GstPadProbe
* [ ] 自定义plugin

#### 平台定制plugins

本章节将介绍`Qualcomm`和`Nvidia`两个平台的一些定制插件，由于我现在更多在`Qualcomm`平台上进行开发，并且`Nvidia`有相对健全的Issue机制和论坛维护，**因此`Nvidia`仅作为补充内容，更新计划待定**。

* [Qualcomm GStreamer Plugins](https://developer.qualcomm.com/qualcomm-robotics-rb5-kit/software-reference-manual/application-semantics/gstreamer-plugins)
  * [ ] qtivdec
  * [ ] qtivtransform
  * [x] qtioverlay
* [Nvidia GStreamer Plugin Overview](https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_Intro.html)
  * [ ] nvvideoconvert
  * [x] nvdsosd
  * [ ] nvvideo4linux2

#### 实用技能

* rtsp流的密码包含'@'的处理
* `uridecodebin实用软解码器`

{% hint style="info" %}
作者才疏学浅，如有纰漏，欢迎指正。
{% endhint %}

###

翻译：[@Yinan Fu](https://github.com/fengxueem)

校对：[@thetffs](https://github.com/thetffs)

### 联系方式

* 在线阅读：<https://ricardolu.gitbook.io/gstreamer/>
* Github：<https://github.com/gesanqiu/gstreamer-example>
* E-mail：<shenglu1202@163.com>

### 许可协议

{% hint style="warning" %}
[署名-非商业性使用-相同方式共享 4.0 国际](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode)
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ricardolu.gitbook.io/gstreamer/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
