日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo

發布時間:2025/5/22 编程问答 15 如意码农
生活随笔 收集整理的這篇文章主要介紹了 GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

??本篇開始gstreamer的編程學習,先搭建基礎的環境,跑通一個基礎的Demo對GStreamer編程有個初步的了解。

 

Demo

??

??

 

GStreamer

??GStreamer是一個靈活、快速、多平臺的多媒體框架,此框架非常強大和通用,用于創建流媒體應用程序。GStreamer框架的許多優點來自其模塊化,GStreamer可以無縫地整合新的插件模塊。但是,由于模塊化和強大的功能往往以更高的復雜性為代價,編寫新的應用程序并不總是那么容易。

結構

??教程分為幾個部分,圍繞一個共同的主題:

  • 基礎教程:描述理解GStreamer中其余教程所需的一般主題。
  • 播放教程:解釋使用GStreamer制作媒體播放應用程序所需知道的一切。
  • Android教程:涉及您需要知道的幾個Android特定主題的教程。
  • iOS教程:涉及您需要知道的幾個iOS特定主題的教程。
    ??基礎教程——理解其余教程所需的一般主題
 

搭建基礎開發環境

步驟一:安裝gstreamer1.0環境

sudo apt-get update
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
sudo apt-get install libglib2.0-0

步驟二:創建C工程

??使用QtCreator新建空的C工程:
??

步驟三:添加gstreamer開發環境

??然后查找gst.h頭文件:

sudo find / -name "gst.h"

??

??查找庫:

sudo find / -name "gstreamer-1.0*”

??

??查找依賴的頭文件:

sudo find / -name "glib.h"

??

sudo find / -name “glibconfig”

??

??將頭文件路徑和庫添加進pri:
??

# gstreamer頭文件和庫文件
INCLUDEPATH += /usr/include/gstreamer-1.0
LIBS += -lgstreamer-1.0
#LIBS += -lgobject-2.0 -lgstreamer-1.0 -lgstvideo-1.0 # glibc頭文件和庫文件
INCLUDEPATH += /usr/include/glib-2.0
INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
LIBS += -lglib-2.0
 

第一個GStreamer程序

步驟一:初始化gst

??這是每個程序都要做的。
??

步驟二:定義管道

??

步驟三:設置管道狀態

??

步驟四:獲取管道的總線bus

??

步驟五:從總線bus中阻塞獲取指定的信息

??

??

步驟六:消息處理

??

步驟七:釋放資源

??

 

關鍵函數

gst_init()

??初始化所有內部結構,檢查哪些插件可用,執行GStreamer的任何命令行選項。

gst_parse_launch()

??在GStreamer中,通過手動組裝單個元素來構建管道,但是,當管道足夠簡單,并且不需要任何高級功能時,可以使用快捷方式:gst_parse_launch();
??此函數接受管道的文本表示并將其轉換為實際的管道,這非常方便。事實上,這個函數非常方便,有一個完全圍繞它構建的工具,請參閱GStreamer工具,了解gst-launch-1.0和gst-launch-1.0語法。
??本篇,我們正在構建一個由一個名為playbin的元素組成的管道。playbin是一個特殊的元素,它既是源又是匯,是一個完整的管道。在內部,它創建并連接了播放媒體所需的所有元素。

gst_element_set_state()

??每個GStreamer元素都有一個關聯的狀態,您或多或少可以將其視為常規DVD播放器中的播放/暫停按鈕。現在,只需說,除非將管道設置為播放狀態,否則播放將不會開始。
??gst_element_set_stat()將管道(我們唯一的元素,記住)設置為播放狀態,從而啟動播放。

gst_element_get_bus()

??檢索管道的總線。

gst_bus_timed_pop_filtered()

??gst_bus_timed_pop_filtered()將阻塞,直到您通過該總線收到指定錯誤或指定的事件,這些事件預定義了。

gst_message_unref(msg);

??清理消息。

gst_object_unref (bus);

??清理qobject類型,按照生成順序逆向的來unref釋放引用。

gst_element_set_state (pipeline, GST_STATE_NULL);

??設置管道狀態為空,資源都會被自動回收。

gst_object_unref (pipeline)

??清理qobject類型,按照生成順序逆向的來unref釋放引用。

 

模塊化

??

gstreamerManager.pri

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD HEADERS += \
$$PWD/gstreamerManager.h SOURCES += \
$$PWD/gstreamerManager.c QMAKE_CXXFLAGS += -fpermissive # gstreamer頭文件和庫文件
INCLUDEPATH += /usr/include/gstreamer-1.0
LIBS += -lgstreamer-1.0
#LIBS += -lgobject-2.0 -lgstreamer-1.0 -lgstvideo-1.0 # glibc頭文件和庫文件
INCLUDEPATH += /usr/include/glib-2.0
INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
LIBS += -lglib-2.0
 

Demo源碼

#include "gstreamerManager.h"

#include <gst/gst.h>

#define DEBUG   printf("%s:%d\n", __FILE__, __LINE__)

void test001HelloWorldDemo(int *argc, char **argv[])
{
GstElement *pipeline;
GstBus *bus;
GstMessage *msg; // 步驟一:初始化gst
gst_init(argc, argv);
// 步驟二:定義管道(指定渲染器,否則ubuntu上渲染畫面會出錯)
// pipeline = gst_parse_launch("playbin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm", NULL);
pipeline = gst_parse_launch("playbin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm video-sink=\"ximagesink\"", NULL);
// 步驟三:開始播放(設置管道的運行狀態:空、準備、播放、暫停)
gst_element_set_state (pipeline, GST_STATE_PLAYING);
// 步驟四:獲取管道的總線
bus = gst_element_get_bus (pipeline);
// 步驟五:阻塞獲取bus上指定的消息返回(未獲取到則阻塞)
msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
// 步驟六:消息的處理(這里有很多消息,只是舉例子一個
if(GST_MESSAGE_TYPE(msg) == GST_MESSAGE_ERROR)
{
g_printerr ("An error occurred! Re-run with the GST_DEBUG=*:WARN "
"environment variable set for more details.\n");
}
// 步驟七:釋放資源(其中管道先設置狀態空:該狀態將會回收所有被該組件占用的資源,然后再釋放)
gst_message_unref (msg);
gst_object_unref (bus);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
}
 

工程模板v1.0.0

emsp;emsp;

入坑

入坑一:播放畫面異常

問題

emsp;emsp;播放畫面錯位
emsp;emsp;

emsp;emsp;測試原本文件應該是:
emsp;emsp;

嘗試

emsp;emsp;命令行去檢測,也是異常:
emsp;emsp;

emsp;emsp;測試windows上,是正常:
emsp;emsp;

emsp;emsp;所以是系統裝的環境可能有問題。重新切換虛擬機使用ubuntu20.04重新制作虛擬機,用起來還是一樣,有問題:
emsp;emsp;

emsp;emsp;用網頁測試,沒問題:
emsp;emsp;

emsp;emsp;用vlc測試,也沒問題:
emsp;emsp;

emsp;emsp;然后測試其他地址試試,發現沒問題:
emsp;emsp;

解決

??后來發現是需要指定渲染器才行。

總結

以上是生活随笔為你收集整理的GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 办公室摸腿吻胸激情视频 | 久久成年| 野花视频在线观看免费 | 久久一区av | 日韩欧美国产亚洲 | 国产又大又黄又爽 | 久久密av | 天天干天天爱天天操 | 美腿丝袜一区二区三区 | 天海翼中文字幕 | 日韩啪啪网站 | 91精品国产综合久久久蜜臀粉嫩 | 夜夜夜夜爽| 日韩性色| 永久免费成人代码 | 黑人又大又粗又长 | 国产伦精品一区二区三区在线 | 波多野结衣办公室33分钟 | 黄色三级a | 波多野结衣福利 | 蜜桃视频一区二区三区在线观看 | 亚洲狠狠婷婷综合久久久久图片 | 大乳丰满人妻中文字幕日本 | a一级网站 | 国产成人综合欧美精品久久 | 国产成人专区 | 天堂一级片 | 好吊妞精品视频 | 欧美夜夜爽 | 欧美精品一区二区三区久久久竹菊 | 性猛交娇小69hd | 在线www色| av在线一区二区三区 | 亚洲精品一区中文字幕乱码 | 国产又色又爽又黄的 | 91久久精品美女高潮 | 欧美视频久久久 | 91视| 久久久久久久久久久97 | 日本不卡二区 | 农村少妇无套内谢粗又长 | 丰满岳乱妇国产精品一区 | av一区二区不卡 | 国产精品自拍99 | 日韩一级片免费观看 | 伊人中文字幕在线观看 | 亚洲午夜精品福利 | 中文字幕av日韩 | 久久久精品免费看 | 国产精品社区 | 久久国产柳州莫菁门 | 天天搞天天 | 中文字幕第三页 | 青青操av在线 | 婷婷精品进入 | 日韩精品视频在线免费观看 | 视频一二三区 | 一区二区三区欧美视频 | 日韩不卡av| 麻豆区1免费| 天天插美女 | av免费在线观看不卡 | 日韩精品视频观看 | 在线看片一区二区 | 免费黄在线看 | 久久久精品久久久久 | 久久亚洲熟女cc98cm | 欧美激情性生活 | 肉色丝袜小早川怜子av | 美女被叉叉的影院 | 亚洲三区视频 | 日韩激情欧美 | 亚洲成人中文字幕在线 | 亚洲大色| 成人精品一区二区三区视频 | 高清成人免费视频 | 欧美国产精品一区二区三区 | 亚洲一区二区三区黄色 | 国产曰肥老太婆无遮挡 | 爱豆国产剧免费观看大全剧集 | 国产精品第100页 | 久久久久久1 | 下面一进一出好爽视频 | 亚洲乱码国产乱码精品精 | 黄色一级在线观看 | 欧美xxxx吸乳 | 在线观看欧美一区二区三区 | 色天天综合 | 黄色片在线免费 | 亚洲美女黄色片 | 久久精品视频在线免费观看 | 天天射av | 亚洲成a | 天天天色 | 日批视频在线看 | 欧美一区二区三区久久久 | 黄色污污视频网站 | 男生草女生视频 | 麻豆视频二区 |