使用GStreamer实现播放器功能 |
您所在的位置:网站首页 › 多功能播放器的使用 › 使用GStreamer实现播放器功能 |
GST简介: gstreamer是linux上的(也支持其它系统) multi-media Framework 多媒体应用框架。一直以来,linux上的多媒体开发都很麻烦,由于没有统一模型,所以很多东西都需要自己实现(或者code copy)。gstreamer的目的就是弥补这一缺陷。 gstreamer有一个核心,核心管理许多的elements。每个element都有自己的功能,比如:音量控制、mp3解码、从硬盘读取多媒体数据、把声音发往声卡等。 用户变成所需要做的,就是把用得着的elements串成线(pipeline)。多媒体流就可以在pipeline里流动了, 一旦pipeline正常工作,就意味着音乐出来了、vedio出来了。 pipeline是在单独的线程中运行的,所以你不必担心自己的进程会阻塞。 并且pipeline线程的管理(创建、销毁、IPC等)都是gstreamer自己负责的,用户程序只需要对其发出控制信息就可以了。 转入正题:
1,首先按惯例咱们建一个管道,添几个元件(从网上搜到的): m_pipeline = gst_element_factory_make("playbin","player"); videosink = gst_element_factory_make("ximagesink","videosink"); audiosink = gst_element_factory_make("alsasink","audiosink");
//向管道中添加元件: g_object_set(G_OBJECT(m_pipeline), "audio-sink", audiosink, "video-sink",videosink, "volume",m_volume, // m_volume是音量大小。 NULL);
g_object_set(G_OBJECT(m_pipeline),"uri", uri.c_str(), NULL); //设置视频文件路径 gst_element_set_state(m_pipeline,GST_STATE_READY); //设置管道状态
2,管道建立完毕,状态初始化完毕,视频路径设置完毕,似乎可以播放了。是的, 我们来播放一下,点击PLAY(如果你有的话)。 gst_element_set_state(m_pipeline,GST_STATE_PLAYING); 运气好的话,就可以播放了。
3,暂停和停止的实现 暂停:gst_element_set_state(m_pipeline,GST_STATE_PAUSE); 停止:gst_element_set_state(m_pipeline, GST_STATE_READY);
4,快放,慢放,倒放: gst_element_seek(m_pipeline, m_speed, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET,value * GST_MSECOND*1000 , GST_SEEK_TYPE_SET,GST_CLOCK_TIME_NONE);
设m_speed 为当前的播放速度。1为正常播放,大于1为快放,小于1为慢放。0不用说,暂停了呗。 似乎还有小于0的情况,小于0怎么办? 倒放!泼出去的水是收不回来的,GST却可以,就让我们用这个理由来喜欢它吧。
value为播放位置,你想跳到什么地方,就设置这个value值。 下面的两个函数可以帮助我们得到当前视频的长度,以及当前的播放位置。 GstFormat fmt =GST_FORMAT_TIME; gint64m_length, m_position; gst_element_query_duration(m_pipeline, &fmt, &m_length); gst_element_query_position(m_pipeline,&fmt, &m_position);
至于这个gst_element_seek()的参数具体是什么意思,可以搜一下,我也不啰嗦了。(汗ing,其实我也不大清楚这些参数具体怎么设置)。 if( m_speed > 0 ) { gst_element_seek (m_pipeline, m_speed,GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET,value * GST_MSECOND*1000 , GST_SEEK_TYPE_SET,GST_CLOCK_TIME_NONE); } else { gst_element_seek (m_pipeline, m_speed,GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET,GST_CLOCK_TIME_NONE, GST_SEEK_TYPE_SET,value * GST_MSECOND*1000 ); }
5,播放,暂停,停止,快放,慢放,倒放都有了,还差什么呢?记不起来了,那就到此为止吧。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |