使用gstreamer搭建简易的播放器

/**

player.c文件
gcc hellogtk.c -o hellogtk `pkg-config --cflags --libs gtk+-2.0 --libs gstreamer-0.10`


*/


#include <gst/gst.h>  


#include <gdk/gdkx.h>  


#include <gtk/gtk.h>  


#include <gst/interfaces/xoverlay.h>  


#include <string.h>  


  


#include "player.h"  


  


static GtkWidget *main_window;  


static GtkWidget *play_button;  


static GtkWidget *skip_button;  


static GtkWidget *pause_button;  


static GtkWidget *stop_button;  


static GtkWidget *status_label; 


static GtkWidget *song_label;  


static GtkWidget *time_label;  


static GtkWidget *seek_scale;  


static GtkWidget *video_output;  


static gpointer window;  


  


static GstElement *play = NULL;  


static GstElement *bin;  


  


static guint timeout_source = 0; 


static guint skip_time_source = 0;  


static char *current_filename = NULL;  


gboolean no_seek = FALSE; 


gboolean is_pause_pressed = FALSE; 


gboolean is_skip = FALSE; 


// 打开文件  


static void file_open(GtkAction *action)  


{  


    GtkWidget *file_chooser = gtk_file_chooser_dialog_new(  


        "Open File", GTK_WINDOW(main_window),  


        GTK_FILE_CHOOSER_ACTION_OPEN,  


        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,  


        GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,  


        NULL);  


  


    if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT) {  


        char *filename;  


        filename = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(file_chooser));  


        // g_signal_emit_by_name(G_OBJECT(stop_button), "clicked");  


        if (current_filename) g_free(current_filename);  


        current_filename = filename;  


       g_print("current_filename===>%s",current_filename);


       //判断pause按钮是否按下


gtk_widget_set_sensitive(GTK_WIDGET(pause_button), FALSE);  


       //chose the song to play 


        if (load_file(filename))  


            gtk_widget_set_sensitive(GTK_WIDGET(play_button), TRUE);  


    }  


    gtk_widget_destroy(file_chooser);  


}  


// 退出  


static void file_quit(GtkAction *action)  


{  


    gtk_main_quit();  


}  


// 关于  


static void help_about(GtkAction *action)  


{  


    GtkWidget *about_dialog = gtk_about_dialog_new();  


    gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(about_dialog), "MediaPlayer");  


    gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about_dialog), "0.0.0");  


    gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(about_dialog), "Copyright @ 2011, Figo");  


  


    gtk_dialog_run(GTK_DIALOG(about_dialog));  


    gtk_widget_destroy(about_dialog);  


}  


  


static GtkActionEntry mainwindow_action_entries[] = {  


    { "FileMenu", "NULL", "文件" },  


    {  


        "OpenFile",  


        GTK_STOCK_OPEN,  


        "打开(O)",  


        "<control>O",  


        "Open a file for playback",  


        G_CALLBACK(file_open)  


    },  


    {  


        "QuitPlayer",  


        GTK_STOCK_QUIT,  


        "退出(Q)",  


        "<control>Q",  


        "Quit the media player",  


        G_CALLBACK(file_quit)  


    },  


    


    { "HelpMenu", "NULL", "帮助" },  


    {  


        "HelpAbout",  


        GTK_STOCK_ABOUT,  


        "关于",  


        "",  


        "About the media player",  


        G_CALLBACK(help_about)  


    }  


};  






GtkWidget *build_gui()  


{  


    GtkWidget *main_vbox;  


    GtkWidget *status_hbox;  


    GtkWidget *controls_hbox;  


    GtkWidget *saturation_controls_hbox;  


  


    GtkActionGroup *actiongroup;  


    GtkUIManager *ui_manager;  


  


    actiongroup = gtk_action_group_new("MainwindowActiongroup");  


    gtk_action_group_add_actions(actiongroup,  


        mainwindow_action_entries,  


        G_N_ELEMENTS(mainwindow_action_entries),  


        NULL);  


  


    ui_manager = gtk_ui_manager_new();  


    gtk_ui_manager_insert_action_group(ui_manager, actiongroup, 0);  


    gtk_ui_manager_add_ui_from_string(  


        ui_manager,  


        "<ui>"  


        "    <menubar name='MainMenu'>"  


       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值