1. 程式人生 > >GStreamer的AppSrc的簡單使用

GStreamer的AppSrc的簡單使用

本文簡單介紹下AppSrc的使用。
GStreamer版本0.10.35.
應用程式可以使用多種方式向Pipeline中注入資料,而使用AppSrc是最簡單的一種。
AppSrc可以工作在倆種模式下:Pull模式和Push模式。Pull模式下,AppSrc會在需要的時候嚮應用程式請求資料(訊號:need-data),而Push模式下,應用程式主動向AppSrc注入資料(訊號:enough-data)。
向AppSrc注入資料需要用於GStreamer的Buffer物件:資料拷貝到GstBuffer之後,通過訊號:push-buffer傳遞給AppSrc。
下面實現一個最簡單的Pull模式的AppSrc使用例子,用於播放一個mp3檔案:

#include <stdio.h>
#include <stdlib.h>
#include <gst/gst.h>
#include <gst/app/gstappsrc.h>

static FILE * fp;

void _needData( GstAppSrc * src, guint arg1, gpointer user_data )
{
    GstBuffer * _buf;
    GstFlowReturn * _ret;
    int _size;

    _buf    =   gst_buffer_new_and_alloc( arg1 );

    _size   =   fread( GST_BUFFER_DATA( _buf ), 1
, arg1, fp ); if( _size < arg1 )//讀到檔案尾了,從頭再讀 { fseek( fp, 0, SEEK_SET ); fread( GST_BUFFER_DATA( _buf ) + _size, 1, arg1 - _size, fp ); } g_signal_emit_by_name( src, "push-buffer", _buf, &_ret );//資料送入pipeline gst_buffer_unref( _buf ); } void _enoughData( GstElement * src, gpointer user_data ) { g_message( "%s"
, __func__ ); } /* * === FUNCTION ====================================================================== * Name: main * Description: * ===================================================================================== */ int main ( int argc, char *argv[] ) { GstElement * _pipeline, * _src, * _codec, * _sink; fp = fopen( "/root/2.mp3", "r" ); g_assert( fp != NULL ); gst_init( &argc, &argv ); g_assert( _src = gst_element_factory_make( "appsrc", "source" )); g_assert( _codec = gst_element_factory_make( "mad", "codec" ));//mad mp3 decoder g_assert( _sink = gst_element_factory_make( "alsasink", "sink" )); _pipeline = gst_pipeline_new( "pipeline" ); gst_bin_add_many( GST_BIN( _pipeline ), _src, _codec, _sink, NULL ); gst_element_link_many( _src, _codec, _sink, NULL ); g_signal_connect ( _src, "need-data", G_CALLBACK( _needData ), NULL ); gst_element_set_state( _pipeline, GST_STATE_PLAYING ); pause(); return 0; } /* ---------- end of function main ---------- */

相關推薦

<java>枚舉的簡單介紹

pic spi str spa 枚舉類 lee string line 舉例 1.枚舉,enum關鍵字,相當於public final static. 2.舉例: 首先定義了一個名為spiciness的枚舉類型。 public enum Spiciness {

簡單的python判斷基偶數練習

一個 pytho 程序 color ont style 奇數 log code #!/usr/bin/env python# Author:William Huangnum = int(input(‘please input your number:‘)) # 用int(

c#配置問題以及簡單防止sql註入,連接池問題,sqldatareader對象對於connection對象的釋放

c#添加引用。system configurationconfigurationManager.AppSettings[“”]<appSetings><add key=“” value=“”></appSetings><connectionStrings><

簡單響應式Bootstrap框架中文官網頁面模板

str 頁面 nbsp 中文 技術分享 http images bsp ots 鏈接:http://pan.baidu.com/s/1o7MQ6RC 密碼:kee5簡單響應式Bootstrap框架中文官網頁面模板

一種大氣簡單的Web管理(陳列)版面設計

borde absolut setup hid color 正常的 for pre == 在頁面的設計中,多版面是一種常見的設計樣式。本文命名一種 這種樣式。能夠簡單描寫敘述為一行top,一列左文件夾,剩余的右下的空間為內容展示區。這種樣式,便於高速定位

網頁內容解析簡單實現

return end pro spa del crawl 測試 節點 nod 概述   在日常開發工作中,有時候我們需要去一些網站上抓取數據,要想抓取數據,就必須先了解網頁結構,根據具體的網頁結構,編寫對應的程序對數據進行采集。最近剛好有一個需求,需要更新收貨地址

侵入式單鏈表的簡單實現

== uri new cast amp typedef all 內存地址 類型 通常情況下,單鏈表的定義是這樣子滴, typedef struct foo_s { int data; struct foo_s

linux簡單命令8---軟件包安裝

yum安裝 .com 軟件包 rpm http span 軟件包安裝 image size 1:使用yum安裝,它不能包查詢和包校驗。它安裝的是RPM格式文件。沒有yum文件 ------------------------------------------

linux簡單命令10---權限

9.png alt 簡單 技術 size 設置 useradd ges img 1:文件權限設置 數字的用法:chmod 755 文件名 ---------------------------------------------下面是文件權限-------

使用canvas進行圖片裁剪簡單功能

getc page nload 一個 use over load 基本 height 1.html部分 使用一個input[type="file"]進行圖片上傳; canvas進行圖片的裁剪展示 <div> <input type="f

侵入式單鏈表的簡單實現(cont)

con ima -o error alt set clas eric int 前一節介紹的侵入式鏈表的實現的封裝性做得不好,因為會讓消費者foo.c直接使用宏container_of()。這一節對list的定義做了一下改進,如下所示: typedef struct lis

python argpare 模塊的簡單用法

python1、實例:#!/usr/bin/python #coding:utf-8 import argparse parser = argparse.ArgumentParser() parser.add_argument(‘-s‘,‘--string‘,dest=‘string‘,nargs=1

JSON的簡單介紹以及C語言的JSON庫使用

編程 delet 逗號 緩沖區 tdi 以及 and 項目 占用 JSON概述   JSON: JavaScript 對象表示法( JavaScript Object Notation) 。是一種輕量級的數據交換格式。 它基於ECMAScript的一個子集。 JSON采

html5canvas簡單畫圖

定位 兩個 畫圖 src html ima 分享 參數 js函數 1.最近做的項目用到了canvas畫圖,但是項目中用到的有點復雜,所以就從頭開始學了canvas畫圖, 2.下面用canvas話了一個時鐘。 主要用到了canvas畫圓形和在圖形中文字的定位,以及畫圖函數中參

BCB寫的簡單的EXCEL合並

blog exc enum gin num read http 民族 .cn config.ini配置文件 //導出excel格式設置 ColumnNumber 列的數量 ColumnName 列的名稱,ColumnLen 列的長度, BeNumber 是否是數字,1是數字

AngularJS單頁面路由配置恩,理解了就很簡單

gif htm con function ner 創建 app 插入 樣式 利用route實現單頁面跳轉功能 利用angularJS開發流程 1)配置好angularJS開發環境 2)利用 yo angular projectname創建項目目錄 3)刪除

寫了一個簡單輪播效果實現

char line query span size html ef6 ava top <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

海量分頁的簡單分析

elk mic als emc usb won tm4 pop iap 此文僅個人理解,不到之處望指出 提出:easyui的datagrid組件有海量分頁的內容,通過查詢數據庫的所有數據在表格進行分頁瀏覽,因為數據量多,也叫海量分頁, 網

簡單的登錄基於代碼的

上帝 logs password 賬號密碼 com 購物平臺 .com class usr 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import getpass 5 print(‘歡迎來到不知

js:簡單的拖動效果

p s move ntb rec cti release 樣式 left eve 效果演示:https://jsfiddle.net/dwqs/b5ywws9f/embedded/result/ html: <div class="w