使用GStreamer的外掛程式playbin開發一個簡單的媒體播放器 視頻與音樂

來源:互聯網
上載者:User

原文出處:http://blog.163.com/lixiangqiu_9202/blog/static/535750372012111911544314/

首先需要安裝GStreamer開發環境

至於如何安裝請另行搜尋

下面只是一個簡單的樣本,其中有我注釋掉的一些代碼

這些注釋掉的代碼有些部分是我練習的時候用的,有些部分是為設定開啟檔案uri路徑設定的

但這樣設定了以後就無法播放來自網路的媒體了,所以給注釋掉了

下面上代碼

#include <gst/gst.h>
#include <string.h>
void error_quit(GstBus *bus,GstMessage *message,GMainLoop *loop)
{
    GError *error;
    gst_message_parse_error(message,&error,NULL);
    printf("Error:%s\n",error->message);
    g_main_loop_quit(loop);
}
void end_of_streamer(GstBus *bus,GstMessage *message,GMainLoop *loop)
{
    printf("End Of Streamer. . .\n");
    g_main_loop_quit(loop);
}
void print_pos(GstElement *pipe)
{
    GstFormat fm=GST_FORMAT_TIME;
    gint64 pos,len;
    gst_element_query_position(pipe,&fm,&pos);
    gst_element_query_duration(pipe,&fm,&len);
    printf("Time:%u:%02u:%02u/%u:%02u:%02u:%02u\n",GST_TIME_ARGS(pos),GST_TIME_ARGS(len));
}
int main(int argc,char **argv)
{
    GMainLoop *loop;
    GstElement *playpipe;
    //GstElement *source;
    GstBus *bus;
    //gchar *file_name;
    gst_init(&argc,&argv);
    loop=g_main_loop_new(NULL,FALSE);
    playpipe=gst_element_factory_make("playbin","play-source");
    //playpipe=gst_pipeline_new("play-pipe");
    //gst_bin_add(GST_BIN(playpipe),source);
    //gst_element_link(playpipe,source);
    //g_object_set(G_OBJECT(playpipe),"location",argv[1],NULL);
    //file_name=malloc(sizeof(gchar)*7+strlen(argv[1])+1);
    //strcpy(file_name,"file://");
    //strcat(file_name,argv[1]);
    g_object_set(G_OBJECT(playpipe),"uri",argv[1],NULL);
    bus=gst_pipeline_get_bus(GST_PIPELINE(playpipe));
    gst_bus_add_signal_watch(bus);
    g_signal_connect(G_OBJECT(bus),"message::error",G_CALLBACK(error_quit),loop);
    g_signal_connect(G_OBJECT(bus),"message::eos",G_CALLBACK(end_of_streamer),loop);
    printf("Start. . .\n");
    gst_element_set_state(playpipe,GST_STATE_PLAYING);
    g_timeout_add(1000,(void *)print_pos,playpipe);
    g_main_loop_run(loop);
    gst_element_set_state(playpipe,GST_STATE_NULL);
    return 0;
}

編譯

gcc -o playbin playbin.c `pkg-config --cflags --libs gstreamer-0.10`

要注意:執行時媒體路徑設定如下:

#./playbin file:///root/Media/jiangnan.avi

GStreamer 支援"file:///<path>/<file>", "http://<host>/<path>/<file>", "mms://<host>/<path>/<file>"等路徑。
為了讓源元件或者接收元件支援特定的 URI,使用函數gst_element_make_from_uri ()可以達到此目的。其中對
源元件使用GST_URI_SRC類型,接收元件使用GST_URI_SINK類型。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.