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

📄 gui_main.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  GTK_WIDGET_SET_FLAGS(cancel_button1, GTK_CAN_DEFAULT);   gtk_window_set_modal(GTK_WINDOW(fs), true);  gtk_window_set_transient_for(GTK_WINDOW(fs), 			       GTK_WINDOW(MainWindow));  g_signal_connect((gpointer) fs, "response",		   G_CALLBACK (onConfigFileOpenResponse),		   GINT_TO_POINTER(new_one));  gtk_widget_show(fs);}static voidon_new1_activate                       (GtkMenuItem     *menuitem,                                        gpointer         user_data){  start_config_file_selection(true);}static voidon_open1_activate                      (GtkMenuItem     *menuitem,                                        gpointer         user_data){  start_config_file_selection(false);}static voidon_save1_activate                      (GtkMenuItem     *menuitem,                                        gpointer         user_data){  if (started == false) {    // read that info    ReadConfigFromWindow();  }  // need to read the information  GtkWidget *statusbar = lookup_widget(MainWindow, "statusbar1");  gtk_statusbar_pop(GTK_STATUSBAR(statusbar), 0);  gtk_statusbar_push(GTK_STATUSBAR(statusbar), 		     0,		     "Writing Configuration and Stream Files");  MyConfig->WriteToFile();  CMediaStream *ms = AVFlow->m_stream_list->GetHead();  while (ms != NULL) {    ms->WriteToFile();    ms = ms->GetNext();  }      gtk_statusbar_pop(GTK_STATUSBAR(statusbar), 0);  gtk_statusbar_push(GTK_STATUSBAR(statusbar), 		     0,		     "Configuration and stream files written");}static void on_generate_addresses_yes (void){  CMediaStream *ms = AVFlow->m_stream_list->GetHead();  while (ms != NULL) {    struct in_addr in;    if (ms->GetBoolValue(STREAM_TRANSMIT)) {      if (ms->GetBoolValue(STREAM_VIDEO_ENABLED) &&	  ms->GetBoolValue(STREAM_VIDEO_ADDR_FIXED) == false) {	in.s_addr = CRtpTransmitter::GetRandomMcastAddress();	ms->SetStringValue(STREAM_VIDEO_DEST_ADDR, inet_ntoa(in));	ms->SetIntegerValue(STREAM_VIDEO_DEST_PORT,			    CRtpTransmitter::GetRandomPortBlock());      }      if (ms->GetBoolValue(STREAM_AUDIO_ENABLED) &&	  ms->GetBoolValue(STREAM_AUDIO_ADDR_FIXED) == false) {	in.s_addr = CRtpTransmitter::GetRandomMcastAddress();	ms->SetStringValue(STREAM_AUDIO_DEST_ADDR, inet_ntoa(in));	ms->SetIntegerValue(STREAM_AUDIO_DEST_PORT,			    CRtpTransmitter::GetRandomPortBlock());      }      if (ms->GetBoolValue(STREAM_TEXT_ENABLED) &&	  ms->GetBoolValue(STREAM_TEXT_ADDR_FIXED) == false) {	in.s_addr = CRtpTransmitter::GetRandomMcastAddress();	ms->SetStringValue(STREAM_TEXT_DEST_ADDR, inet_ntoa(in));	ms->SetIntegerValue(STREAM_TEXT_DEST_PORT,			    CRtpTransmitter::GetRandomPortBlock());      }    }    ms = ms->GetNext();  }  AVFlow->ValidateAndUpdateStreams();  DisplayStreamData(SelectedStream);}static voidon_generate_addresses_activate         (GtkMenuItem     *menuitem,                                        gpointer         user_data){  printf("generate_addresses_activate\n");  YesOrNo("Generate Random Multicast Addresses",	  "This will generate new addresses and ports\n"	  "for all Streams\n"	  "\nDo you want to continue ?",	  true,	  GTK_SIGNAL_FUNC(on_generate_addresses_yes),	  NULL);}static void on_restart_record_yes (void){  AVFlow->RestartFileRecording();}static const char *restart1 = "This will restart recording for all streams\n""\nDo you want to continue ?";static const char *restart2 = "This will restart recording for all streams\n""\nIt is configured to wipe out the existing file\n""\nDo you want to continue ?";static void on_restart_recording_activate           (GtkMenuItem  *menuitem,					 gpointer      user_data){  YesOrNo("Restart Recording",	  MyConfig->GetIntegerValue(CONFIG_RECORD_MP4_FILE_STATUS)	  == FILE_MP4_CREATE_NEW ? restart1 : restart2,	  false,	  GTK_SIGNAL_FUNC(on_restart_record_yes),	  NULL);}static voidon_generate_sdp_activate         (GtkMenuItem     *menuitem,				  gpointer         user_data){  AVFlow->ValidateAndUpdateStreams();  GtkWidget *statusbar = lookup_widget(MainWindow, "statusbar1");  gtk_statusbar_pop(GTK_STATUSBAR(statusbar), 0);  gtk_statusbar_push(GTK_STATUSBAR(statusbar), 		     0,		     "SDP files have been generated");}static voidon_preferences1_activate               (GtkMenuItem     *menuitem,                                        gpointer         user_data){  create_PreferencesDialog();}static voidon_about1_activate                     (GtkMenuItem     *menuitem,                                        gpointer         user_data){  char buffer[1024];  snprintf(buffer, sizeof(buffer), 	   "mp4live %s %s\n"	   "\nAn open source live broadcaster\n"	   "\nDeveloped by Cisco Systems\n"	   "\nUsing open source packages:\n"	   "lame encoder\n"	   "faac encoder\n"#if defined(HAVE_XVID10) || defined(HAVE_XVID_H)	   "Xvid mpeg-4 encoder\n"#endif#ifdef HAVE_FFMPEG	   "Ffmpeg encoder\n"#endif#ifdef HAVE_X264	   "H.264 encoder from x264\n"#endif	   "H.261 encoder from UC\n"	   "Glade interface designer\n"	   "\n2000 to present\n"	   ,	   get_linux_video_type(),	   MPEG4IP_VERSION);  ShowMessage("About", buffer);}// Source Menu handlersstatic void RestoreSourceMenu (void){  GtkWidget *wid = lookup_widget(MainWindow, "SourceOptionMenu");  gtk_option_menu_set_history(GTK_OPTION_MENU(wid), 0);}static voidon_VideoSourceMenu_activate            (GtkMenuItem     *menuitem,                                        gpointer         user_data){  RestoreSourceMenu();  create_VideoSourceDialog();}static voidon_AudioSourceMenu_activate           (GtkMenuItem     *menuitem,                                        gpointer         user_data){  RestoreSourceMenu();  create_AudioSourceDialog();}static voidon_picture_settings_activate           (GtkMenuItem     *menuitem,                                        gpointer         user_data){  RestoreSourceMenu();  CreatePictureDialog();}#ifdef HAVE_TEXTstatic voidon_TextSourceMenu_activate             (GtkMenuItem     *menuitem,                                        gpointer         user_data){  RestoreSourceMenu();  create_TextSourceDialog();}#endif// Add Stream Dialogstatic voidon_AddStreamDialog_response            (GtkDialog       *dialog,                                        gint             response_id,                                        gpointer         user_data){  if (GTK_RESPONSE_OK == response_id) {    GtkWidget *temp = lookup_widget(GTK_WIDGET(dialog), "AddStreamText");        const char *stream_name = gtk_entry_get_text(GTK_ENTRY(temp));    if ((stream_name == NULL) || (*stream_name == '\0')) {      ShowMessage("Add Stream Error", "Must enter stream name", GTK_WIDGET(dialog));      return;    }    if (AVFlow->AddStream(stream_name) == false) {      ShowMessage("Not Added", "An Error as occurred\nStream has not been added");    } else {      DisplayStreamsInView(NULL, stream_name);      DisplayStreamData(stream_name);    }  }  gtk_widget_destroy(GTK_WIDGET(dialog));}// This is if they hit return from the AddStream text windowstatic void on_AddStreamText_activate (GtkEntry *ent,				       gpointer user_data){  on_AddStreamDialog_response(GTK_DIALOG(user_data),			      GTK_RESPONSE_OK,			      NULL);}// create the add stream dialogstatic voidon_AddStreamButton_clicked             (GtkButton       *button,                                        gpointer         user_data){  GtkWidget *AddStreamDialog;  GtkWidget *dialog_vbox1;  GtkWidget *vbox20;  GtkWidget *AddStreamText;  GtkWidget *dialog_action_area1;  GtkWidget *cancelbutton1;  GtkWidget *okbutton1;  GtkTooltips *tooltips;  tooltips = gtk_tooltips_new();  AddStreamDialog = gtk_dialog_new();  gtk_window_set_title(GTK_WINDOW(AddStreamDialog), _("Add Stream"));  gtk_window_set_modal(GTK_WINDOW(AddStreamDialog), TRUE);  gtk_window_set_transient_for(GTK_WINDOW(AddStreamDialog), 			       GTK_WINDOW(MainWindow));  gtk_window_set_resizable(GTK_WINDOW(AddStreamDialog), FALSE);  gtk_dialog_set_has_separator(GTK_DIALOG(AddStreamDialog), FALSE);  dialog_vbox1 = GTK_DIALOG(AddStreamDialog)->vbox;  gtk_widget_show(dialog_vbox1);  vbox20 = gtk_vbox_new(FALSE, 0);  gtk_widget_show(vbox20);  gtk_box_pack_start(GTK_BOX(dialog_vbox1), vbox20, TRUE, TRUE, 0);  AddStreamText = gtk_entry_new();  gtk_widget_show(AddStreamText);  gtk_box_pack_start(GTK_BOX(vbox20), AddStreamText, FALSE, FALSE, 16);  gtk_tooltips_set_tip(tooltips, AddStreamText, _("Enter Stream Name"), NULL);  gtk_entry_set_width_chars(GTK_ENTRY(AddStreamText), 40);  dialog_action_area1 = GTK_DIALOG(AddStreamDialog)->action_area;  gtk_widget_show(dialog_action_area1);  gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area1), GTK_BUTTONBOX_END);  cancelbutton1 = gtk_button_new_from_stock("gtk-cancel");  gtk_widget_show(cancelbutton1);  gtk_dialog_add_action_widget(GTK_DIALOG(AddStreamDialog), cancelbutton1, GTK_RESPONSE_CANCEL);  GTK_WIDGET_SET_FLAGS(cancelbutton1, GTK_CAN_DEFAULT);  okbutton1 = gtk_button_new_from_stock("gtk-ok");  gtk_widget_show(okbutton1);  gtk_dialog_add_action_widget(GTK_DIALOG(AddStreamDialog), okbutton1, GTK_RESPONSE_OK);  GTK_WIDGET_SET_FLAGS(okbutton1, GTK_CAN_DEFAULT);    g_signal_connect((gpointer) AddStreamText, "activate",		   G_CALLBACK(on_AddStreamText_activate),		   AddStreamDialog);  g_signal_connect((gpointer) AddStreamDialog, "response",                    G_CALLBACK(on_AddStreamDialog_response),                    NULL);  /* Store pointers to all widgets, for use by lookup_widget(). */  GLADE_HOOKUP_OBJECT_NO_REF(AddStreamDialog, AddStreamDialog, "AddStreamDialog");  GLADE_HOOKUP_OBJECT_NO_REF(AddStreamDialog, dialog_vbox1, "dialog_vbox1");  GLADE_HOOKUP_OBJECT(AddStreamDialog, vbox20, "vbox20");  GLADE_HOOKUP_OBJECT(AddStreamDialog, AddStreamText, "AddStreamText");  GLADE_HOOKUP_OBJECT_NO_REF(AddStreamDialog, dialog_action_area1, "dialog_action_area1");  GLADE_HOOKUP_OBJECT(AddStreamDialog, cancelbutton1, "cancelbutton1");  GLADE_HOOKUP_OBJECT(AddStreamDialog, okbutton1, "okbutton1");  GLADE_HOOKUP_OBJECT_NO_REF(AddStreamDialog, tooltips, "tooltips");  gtk_widget_grab_focus(AddStreamText);  gtk_widget_show(AddStreamDialog);}/* * Delete Stream handlers and dialog */static voidon_DeleteStreamDialog_response         (GtkDialog       *dialog,                                        gint             response_id,                                        gpointer         user_data){  if (GTK_RESPONSE_YES == response_id) {    if (MyConfig->GetBoolValue(CONFIG_VIDEO_PREVIEW)) {      const char *stream = 	MyConfig->GetStringValue(CONFIG_VIDEO_PREVIEW_STREAM);      if (strcmp(stream, SelectedStream) == 0) {	AVFlow->StopVideoPreview();	MyConfig->SetBoolValue(CONFIG_VIDEO_PREVIEW, false);	MyConfig->SetStringValue(CONFIG_VIDEO_PREVIEW_STREAM, NULL);      }    }    if (AVFlow->DeleteStream(SelectedStream) == false) {      ShowMessage("Not Deleted", "An Error as occurred\nStream not deleted");    } else {      DisplayStreamsInView();      DisplayStreamData(NULL);    }  }  gtk_widget_destroy(GTK_WIDGET(dialog));}static voidon_DeleteStreamButton_clicked          (GtkButton       *button,                                        gpointer         user_data){  GtkWidget *DeleteStreamDialog;  GtkWidget *dialog_vbox2;  GtkWidget *vbox21;  GtkWidget *label72;  GtkWidget *DeleteStreamLabel;  GtkWidget *label74;  GtkWidget *dialog_action_area2;  GtkWidget *cancelbutton2;  GtkWidget *DeleteStreamButton;  if (started) return;  if (AVFlow->m_stream_list->GetCount() == 1) {    ShowMessage("Delete Error", "Can not delete last stream", MainWindow);    return;  }  DeleteStreamDialog = gtk_dialog_new();  gtk_widget_set_size_request(DeleteStreamDialog, 236, -1);  gtk_window_set_title(GTK_WINDOW(DeleteStreamDialog), _("Delete Stream ?"));  gtk_window_set_modal(GTK_WINDOW(DeleteStreamDialog), TRUE);  gtk_window_set_transient_for(GTK_WINDOW(DeleteStreamDialog), 			       GTK_WINDOW(MainWindow));  gtk_window_set_resizable(GTK_WINDOW(DeleteStreamDialog), FALSE);  gtk_window_set_destroy_with_parent(GTK_WINDOW(DeleteStreamDialog), TRUE);  gtk_dialog_set_has_separator(GTK_DIALOG(DeleteStreamDialog), FALSE);  dialog_vbox2 = GTK_DIALOG(DeleteStreamDialog)->vbox;  gtk_widget_show(dialog_vbox2);  vbox21 = gtk_vbox_new(FALSE, 0);  gtk_widget_show(vbox21);  gtk_box_pack_start(GTK_BOX(dialog_vbox2), vbox21, TRUE, TRUE, 0);  label72 = gtk_label_new(_("You are about to delete stream:"));  gtk_widget_show(label72);  gtk_box_pack_start(GTK_BOX(vbox21), label72, FALSE, FALSE, 23);  DeleteStreamLabel = gtk_label_new(SelectedStream);  gtk_widget_show(DeleteStreamLabel);  gtk_box_pack_start(GTK_BOX(vbox21), DeleteStreamLabel, FALSE, FALSE, 1);  label74 = gtk_label_new(_("This operation cannot be\nreversed."));  gtk_widget_show(label74);  gtk_box_pack_start(GTK_BOX(vbox21), label74, FALSE, FALSE, 24);  gtk_label_set_justify(GTK_LABEL(label74), GTK_JUSTIFY_CENTER);  dialog_action_area2 = GTK_DIALOG(DeleteStreamDialog)->action_area;  gtk_widget_show(dialog_action_area2);  gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area2), GTK_BUTTONBOX_END);  cancelbutton2 = gtk_button_new_from_stock("gtk-no");  gtk_widget_show(cancelbutton2);  gtk_dialog_add_action_widget(GTK_DIALOG(DeleteStreamDialog), cancelbutton2, GTK_RESPONSE_NO);  GTK_WIDGET_SET_FLAGS(cancelbutton2, GTK_CAN_DEFAULT);  DeleteStreamButton = gtk_button_new_from_stock("gtk-yes");  gtk_widget_show(DeleteStreamButton);  gtk_dialog_add_action_widget(GTK_DIALOG(DeleteStreamDialog), DeleteStreamButton, GTK_RESPONSE_YES);  GTK_WIDGET_SET_FLAGS(DeleteStreamButton, GTK_CAN_DEFAULT);  g_signal_connect((gpointer) DeleteStreamDialog, "response",                    G_CALLBACK(on_DeleteStreamDialog_response),                    NULL);  /* Store pointers to all widgets, for use by lookup_widget(). */  GLADE_HOOKUP_OBJECT_NO_REF(DeleteStreamDialog, DeleteStreamDialog, "DeleteStreamDialog");

⌨️ 快捷键说明

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