⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdpshell.c

📁 SDP文件解析代码
💻 C
字号:
/* *       SDP shell for CMMB IP * ===================================================================================== *        Version:  1.0 *        Created:  2007年12月24日 17时31分37秒 CST *       Compiler:  gcc *         Author:  kf701 (linux), kf701.ye AT gmail.com *        Company:  CodeRepertory *      CopyRight:  Copyright (c) 2007 kf701 *        SVNinfo:  $Id$ * ===================================================================================== */#include <errno.h>#include <math.h>  #include <stdio.h> #include <stdlib.h>#include <string.h>#include <stdbool.h>#include <stdint.h>#include <unistd.h>#include "parser.h"#include "unix_socket.h"#include <gtk/gtk.h>#include <gdk/gdkkeysyms.h>#define CMMB_DAEMON_PATH    "/tmp/cmmb_daemon.socket"/* define head type */#define CHANGE_SERVICE  1#define DILLO_EXIT      2#define MPLAYER_EXIT    3#define MAX_PACKET_LEN  4096 typedef struct{	uint8_t type;	uint8_t padding;	uint16_t len;} net_hdr_t;#define WEB_ROOT  "/mnt/app/CMMBIP/root"void leave_term();int read_file(char *filename, char *buf, int len);GtkWidget *create_window(void);gboolean handler(GtkWidget *widget, GdkEventKey* event, gpointer data);FILE *mplayer;int main ( int argc, char *argv[] ){	if( argc != 2 )	{		printf("Usage: sdpshell sdpfile\n");		exit(1);	}	leave_term();	gtk_set_locale ();	gtk_init (&argc, &argv);	char filename[128];	sprintf( filename, "%s/%s", WEB_ROOT, argv[1]);	printf("sdpfile: %s\n", filename);	char buf[2048];	int r = read_file( filename, buf, sizeof(buf) );	fsdp_description_t *sdp = fsdp_description_new();	fsdp_parse( buf, sdp );	int addr_type = fsdp_get_owner_address_type(sdp);	printf("addr type = %d\n", addr_type);	char *addr = fsdp_get_global_conn_address(sdp);	printf("conn addr = %s\n", addr);	fsdp_media_description_t *sdp_media = fsdp_get_media(sdp, 0);	int port = fsdp_get_media_port(sdp_media);	printf("media port = %d\n", port );	net_hdr_t header;	memset(&header, 0, sizeof(net_hdr_t));	header.type = CHANGE_SERVICE;	uint8_t sock_buf[1024];	memcpy(sock_buf, &header, sizeof(net_hdr_t));	int size = sprintf(sock_buf+sizeof(net_hdr_t), "addrtype=%d\r\naddr=%s\r\nport=%d\r\n",			addr_type, addr, port);	int unsock = unix_socket_new();	header.len = size;	unix_socket_send(unsock, CMMB_DAEMON_PATH, sock_buf, size+sizeof(net_hdr_t));	unix_socket_free(unsock);	/* kill dillo */	system("/mnt/app/CMMBIP/kill_dillo.sh");	cmmb_set_fb_fps();	/* open player now */	printf("open gtk\n");	GtkWidget *win = create_window();	gtk_widget_show (win);	printf("open player\n");	char cmd[128];	sprintf(cmd,"qplayer -usevdc -vo vdc /media/movie/movie-cf/FranceMM.avi");	mplayer = popen (cmd,"w");	gtk_main();	cmmb_restore_fb_fps();	system("/mnt/appt/CMMBIP/restart_dillo.sh");	return 0;}int read_file(char *filename, char *buf, int len){	FILE *fp = fopen( filename, "r" );	if( NULL == fp )		return -1;	int ret = fread(buf, 1, len, fp);	fclose( fp );	return ret;}void leave_term(){	if( fork() > 0 )		exit(0);}GtkWidget *create_window(void){	GtkWidget *window1;	GtkWidget *image1;	window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);	gtk_widget_set_size_request (window1, 480, 272);	gtk_window_set_title (GTK_WINDOW (window1), "window1");	image1 = gtk_image_new_from_file ("/mnt/app/CMMBIP/xx.jpg");	//image1 = create_pixmap (window1, "xx.jpg");	gtk_widget_show (image1);	gtk_container_add (GTK_CONTAINER (window1), image1);	g_signal_connect(GTK_WIDGET(window1),"key-press-event",G_CALLBACK(handler),NULL);	return window1;}gbooleanhandler(GtkWidget *widget, GdkEventKey* event, gpointer data){	if(event->keyval == GDK_q)	{		fwrite("q", 1, 1,mplayer);		fflush(mplayer);		pclose(mplayer);		gtk_main_quit();	}	if(event->keyval == GDK_Left)	{		fwrite("9", 1, 1,mplayer);		fflush(mplayer);	}	else if(event->keyval == GDK_Right)	{		fwrite("0", 1, 1,mplayer);		fflush(mplayer);	}	return FALSE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -