📄 sdpshell.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 + -