GStreamer的AppSrc的简单使用
来源:互联网 发布:支付宝 for mac版下载 编辑:程序博客网 时间:2024/05/21 09:38
本文简单介绍下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 ---------- */
0 0
- GStreamer的AppSrc的简单使用
- GStreamer中AppSrc的简单使用(续)
- GStreamer的AppSrc的使用(续2)
- gstreamer学习笔记:分享几个appsink和appsrc的example
- gstreamer -- appsrc
- AppSrc与Playbin2的结合使用
- gstreamer use appsrc with playbin2
- gstreamer的使用
- 使用GStreamer 编写一个简单的MP3播放器
- Ubuntu下使用GStreamer开发简单的mp3播放器
- Ubuntu下使用GStreamer开发简单的mp3播放器
- gstreamer中的好东西,appsink和appsrc
- gstreamer --从appsrc 到 rtmpsink推流
- gstreamer -- appsrc 到 rtsp推流
- meego上gstreamer的使用
- 【miscellaneous】gstreamer构建的简单方法
- Gstreamer的简单理解(转载)
- 使用GStreamer的插件playbin开发一个简单的媒体播放器 视频与音乐
- Xcode中SVN不能提交.a文件的解决方法
- ActiveMQ之三:启动ActiveMQ的Broker
- WebPage
- FZU 2150 Fire Game
- SAP Content Server
- GStreamer的AppSrc的简单使用
- Redis持久化实践及灾难恢复模拟(下)
- 用户(spark)不在sudoers文件中的解决方法
- 测试你是否和LTC水平一样高(多重循环的停止)
- ios中4种开启新的线程的处理方式以及运用范围(多线程)
- 范式
- Linux C++利用openldap实现ldap客户端
- 使用Symbolicatecrash和xcrun atos分析crash log
- Exists 和 In