AppSrc与Playbin2的结合使用

前面关于AppSrc的文章记录了使用AppSrc时,Pipeline的构建过程,这中间需要手动设置一些Element的属性。如果使用Playbin的话,可以省去这些过程。
Playbin支持URI解析,而AppSrc支持的URI格式为appsrc://。因此,只需要将Playbin的uri属性设置为appsrc://,则playbin就会自动查找到appsrc组件,并将其作为pipeline的source组件。对于AppSrc相关的signal的设置,只要在playbin提供的source-setup事件中处理即可。参考代码如下:

_pipeline   =   gst_element_factory_make( "playbin2", "playbin" );
g_signal_connect( _pipeline, "source-setup", G_CALLBACK( setupSrc ), NULL );

AppSrc作为source组件,如果需要支持seek操作,需要设置其stream-type属性。该属性为枚举类型:

(0): stream           - GST_APP_STREAM_TYPE_STREAM
(1): seekable         - GST_APP_STREAM_TYPE_SEEKABLE
(2): random-access    - GST_APP_STREAM_TYPE_RANDOM_ACCESS

该属性的设置可以在source-setup的处理函数中进行:

/*
 * ===  FUNCTION  ======================================================================
 *         Name:  setupSrc
 *  Description:
 * =====================================================================================
 */
static void setupSrc( GstElement * object, GstElement * arg0, gpointer user_data )
{
    gint64 _size;
    g_message( "%s", __func__ );
    fseek( fp, 0, SEEK_END );

    _size   =   ftell( fp );
    g_object_set( arg0, "size", _size, NULL );
    fseek( fp, 0, SEEK_SET );
    g_object_set( arg0, "stream-type", GST_APP_STREAM_TYPE_RANDOM_ACCESS, NULL );

    g_signal_connect ( arg0, "need-data", G_CALLBACK( _needData ), NULL );
    g_signal_connect ( arg0, "enough-data", G_CALLBACK( _enoughData ), NULL );
    g_signal_connect ( arg0, "seek-data", G_CALLBACK( _seekData ), NULL );
}       /* -----  end of static function setupSrc  ----- */

附:
支持uri解析的element都会实现GstURIHandler接口,因此,查找gstreamer支持uri解析的element可以按如下方式执行(还不知道是否有更好的方法,用gst-inspect一个一个查太慢且容易出错):

$cd <source_of_gstreamer>
$grep get_protocols ./ -rnw --include=*.c
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值