#include #include #include #include #include #include #include int eofflag = 0; void eof(GstSrc *src) { eofflag = 1; } int main(int argc,char *argv[]) { struct sockaddr_in src_addr, dst_addr; int sockaddrlen; int lsock; int one = 1; int sndbuf = 4096; int sock; GstElement *src,*sink; gst_init(&argc,&argv); lsock = socket(AF_INET,SOCK_STREAM,0); if (lsock < 0) { perror("creating socket"); exit(1); } if (setsockopt(lsock,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one))) { perror("setsockopt(SO_REUSEADDR)"); exit(1); } src_addr.sin_family = AF_INET; src_addr.sin_addr.s_addr = INADDR_ANY; src_addr.sin_port = htons(8001); if (bind(lsock,(struct sockaddr *)&src_addr,sizeof(src_addr))) { perror("binding"); exit(1); } if (setsockopt(lsock,SOL_SOCKET,SO_SNDBUF,(char *)&sndbuf,sizeof(sndbuf))) { perror("setsockopt(SO_SNDBUF)"); exit(1); } g_print("listening\n"); listen(lsock,8); sock = accept(lsock,(struct sockaddr *)&dst_addr,&sockaddrlen); g_print("connected\n"); close(lsock); g_print("creating pipeline\n"); src = gst_disksrc_new_with_location("src",argv[1]); g_print("have src\n"); gtk_signal_connect(GTK_OBJECT(src),"eof",GTK_SIGNAL_FUNC(eof),NULL); g_print("have eof signal\n"); sink = gst_fdsink_new_with_fd("sink",sock); g_print("have sink\n"); g_print("connecting\n"); gst_pad_connect(gst_element_get_pad(src,"src"), gst_element_get_pad(sink,"sink")); g_print("pushing...\n"); while (!eofflag) gst_src_push(GST_SRC(src)); sleep(1); close(sock); }