这个程序是要实现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 =