原文出處: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類型。