用gstreamer写的一个播放器

这个程序是要实现linux下的一个简单播放器,要求播放器能够向远端服务器发送消息,相应键盘消息,切换节目具体功能是:响应键盘的N、P和数字键,N:下一个节目;P:前一个节目;数字键:选择对应的节目在切换节目的时候需要向远端服务器发送响应的消息。#include <gst/gst.h>#include <gst/video/video.h>#include <gst/i...
摘要由CSDN通过智能技术生成

这个程序是要实现linux下的一个简单播放器,要求播放器能够向远端服务器发送消息,相应键盘消息,切换节目

具体功能是:响应键盘的N、P和数字键,N:下一个节目;P:前一个节目;数字键:选择对应的节目

在切换节目的时候需要向远端服务器发送响应的消息。


#include <gst/gst.h>

#include <gst/video/video.h>
#include <gst/interfaces/xoverlay.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gdk/gdkwindow.h>
#include <glib.h>
#include <glib/gprintf.h>
#include <stdlib.h>
#include <string.h>
#include <gdk/gdkkeysyms.h>
#include <signal.h>
#include <sys/time.h>
#include <time.h>
#include <string.h>
#include <assert.h>
#include <vector>
#include <string>
#include <list>
//#include <map>
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>


using std::string;
using std::vector;
using std::list;
using std::swap;


//using namespace gstchannel;


typedef struct _CustomData {  
  GstElement *pipeline;  
  GstElement *video_sink;  
  GMainLoop *loop;  
    
  gboolean playing;  /* Playing or Paused */  
  gdouble rate;      /* Current playback rate (can be negative) */  
} CustomData;


#define CH_NUM 3
/* Default video sink */
#define DEFAULT_VIDEOSINK "autovideosink"


gint channel_index = 1;//
gulong embed_xid;
GtkWidget *video_window;
GtkWidget *main_window;
GdkWindow *video_window_xwindow;


GstElement *sink;
gchar channel[CH_NUM][128];
gchar* uri_udp[CH_NUM] = {"udp://127.0.0.1:5050",
                                                    "udp://0.0.0.0:5050",
                                                    "udp://0.0.0.0:5051"};//127.0.0.1:5050


gchar* uri_file[CH_NUM] = {"file:///home/ttk/Videos/test1.ts",
                     "file:///home/ttk/Videos/test2.ts",
                     "file:///home/ttk/Videos/test3.ts"};




/* slightly convoluted way to find a working video sink that's not a bin,
 * one could use autovideosink from gst-plugins-good instead
 */
static GstElement *
find_video_sink (void)
{
  GstStateChangeReturn sret;
  GstElement *sink;


  if ((sink = gst_element_factory_make ("xvimagesink", NULL))) {
    sret = gst_element_set_state (sink, GST_STATE_READY);
    if (sret == GST_STATE_CHANGE_SUCCESS)
      return sink;


    gst_element_set_state (sink, GST_STATE_NULL);
  }
  gst_object_unref (sink);


  if ((sink = gst_element_factory_make ("ximagesink", NULL))) {
    sret = gst_element_set_state (sink, GST_STATE_READY);
    if (sret =
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值