📄 streamout.cpp
字号:
if( !dup_opts.IsEmpty() ) dup_opts += wxT(","); dup_opts += wxT("dst=std{access=mmsh,mux="); dup_opts += encapsulation; if( i_encapsulation_type == ASF_ENCAPSULATION ) dup_opts += wxT("h"); dup_opts += wxT(",url="); dup_opts += net_addrs[HTTP_ACCESS_OUT]->GetLineText(0); dup_opts += wxString::Format( wxT(":%d"), net_ports[MMSH_ACCESS_OUT]->GetValue() ); dup_opts += wxT("}"); } if( access_checkboxes[UDP_ACCESS_OUT]->IsChecked() ) { if( !dup_opts.IsEmpty() ) dup_opts += wxT(","); dup_opts += wxT("dst=std{access=udp,mux="); dup_opts += encapsulation + wxT(",url="); wxString udp_addr = net_addrs[UDP_ACCESS_OUT]->GetLineText(0); if ((udp_addr[0u] != '[') && (udp_addr.Find(':') != -1)) { dup_opts += wxT ("[") + udp_addr + wxT ("]"); } else { dup_opts += udp_addr; } dup_opts += wxString::Format( wxT(":%d"), net_ports[UDP_ACCESS_OUT]->GetValue() ); /* SAP only if UDP */ if( sap_checkbox->IsChecked() ) { dup_opts += wxT(",sap"); if( ! announce_group->GetLineText(0).IsEmpty() ) { dup_opts += wxT(",group=\""); dup_opts += announce_group->GetLineText(0); dup_opts += wxT("\""); } if( ! announce_addr->GetLineText(0).IsEmpty() ) { dup_opts += wxT(",name=\""); dup_opts += announce_addr->GetLineText(0); dup_opts += wxT("\""); } } /* SLP only if UDP */ if( slp_checkbox->IsChecked() ) { dup_opts += wxT(",slp"); if( ! sap_checkbox->IsChecked() && ! announce_addr->GetLineText(0).IsEmpty() ) { dup_opts += wxT(",name=\""); dup_opts += announce_addr->GetLineText(0); dup_opts += wxT("\""); } } dup_opts += wxT("}"); } wxString duplicate; if( !dup_opts.IsEmpty() ) { if( !transcode.IsEmpty() ) duplicate = wxT(":"); duplicate += wxT("duplicate{") + dup_opts + wxT("}"); } wxString misc; if( (!transcode.IsEmpty() || !duplicate.IsEmpty()) && sout_all_checkbox->IsChecked() ) { misc = wxT(" :sout-all"); } if( !transcode.IsEmpty() || !duplicate.IsEmpty() ) mrl_combo->SetValue( wxT(":sout=#") + transcode + duplicate + misc ); else mrl_combo->SetValue( wxT("") );}wxPanel *SoutDialog::AccessPanel( wxWindow* parent ){ int i; wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition, wxSize(200, 200) ); wxStaticBox *panel_box = new wxStaticBox( panel, -1, wxU(_("Output methods")) ); wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box, wxVERTICAL ); wxFlexGridSizer *sizer = new wxFlexGridSizer( 2, 4, 20 ); static const wxString access_output_array[] = { wxU(_("Play locally")), wxU(_("File")), wxU(_("HTTP")), wxU(_("MMSH")), wxU(_("UDP")), }; for( i=0; i < ACCESS_OUT_NUM; i++ ) { access_checkboxes[i] = new wxCheckBox( panel, AccessType1_Event + i, access_output_array[i] ); access_subpanels[i] = new wxPanel( panel, -1 ); } /* Play locally row */ wxFlexGridSizer *subpanel_sizer; wxStaticText *label; label = new wxStaticText( access_subpanels[0], -1, wxT("") ); subpanel_sizer = new wxFlexGridSizer( 1, 1, 20 ); subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); access_subpanels[0]->SetSizerAndFit( subpanel_sizer ); access_subpanels[0]->Hide(); /* File row */ subpanel_sizer = new wxFlexGridSizer( 3, 2, 20 ); label = new wxStaticText( access_subpanels[1], -1, wxU(_("Filename")) ); file_combo = new wxComboBox( access_subpanels[1], FileName_Event, wxT(""), wxPoint(20,25), wxSize(200, -1) ); wxButton *browse_button = new wxButton( access_subpanels[1], FileBrowse_Event, wxU(_("Browse...")) ); subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subpanel_sizer->Add( file_combo, 1, wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subpanel_sizer->Add( browse_button, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL ); subpanel_sizer->Add( new wxPanel(access_subpanels[1], -1), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); dump_checkbox = new wxCheckBox( access_subpanels[1], FileDump_Event, wxU(_("Dump raw input")) ); subpanel_sizer->Add( dump_checkbox, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxTOP, 5 ); access_subpanels[1]->SetSizerAndFit( subpanel_sizer ); /* Net rows */ for( i = HTTP_ACCESS_OUT; i < ACCESS_OUT_NUM; i++ ) { subpanel_sizer = new wxFlexGridSizer( 4, 1, 20 ); label = new wxStaticText( access_subpanels[i], -1, wxU(_("Address")) ); net_addrs[i] = new wxTextCtrl( access_subpanels[i], NetAddr1_Event + i - HTTP_ACCESS_OUT, wxT(""), wxDefaultPosition, wxSize( 200, -1 ), wxTE_PROCESS_ENTER); subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subpanel_sizer->Add( net_addrs[i], 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL ); int val = config_GetInt( p_intf, "server-port" ); label = new wxStaticText( access_subpanels[i], -1, wxU(_("Port")) ); net_ports[i] = new wxSpinCtrl( access_subpanels[i], NetPort1_Event + i - HTTP_ACCESS_OUT, wxString::Format(wxT("%d"), val), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 65535, val ); subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subpanel_sizer->Add( net_ports[i], 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL ); access_subpanels[i]->SetSizerAndFit( subpanel_sizer ); } /* Stuff everything into the main panel */ for( i=1; i < ACCESS_OUT_NUM; i++ ) { sizer->Add( access_checkboxes[i], 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 ); sizer->Add( access_subpanels[i], 1, wxEXPAND | wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, 5 ); } panel_sizer->Add( access_checkboxes[0], 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 ); panel_sizer->Add( sizer, 1, wxEXPAND | wxTOP, 3 ); panel->SetSizerAndFit( panel_sizer ); /* Update access type panel */ for( i=1; i < ACCESS_OUT_NUM; i++ ) { access_subpanels[i]->Disable(); } return panel;}wxPanel *SoutDialog::MiscPanel( wxWindow* parent ){ wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition, wxSize(200, 200) ); wxStaticBox *panel_box = new wxStaticBox( panel, -1, wxU(_("Miscellaneous options")) ); wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box, wxVERTICAL ); /* Announce Row */ misc_subpanels[ANN_MISC_SOUT] = new wxPanel( panel, -1 ); wxFlexGridSizer *subpanel_sizer = new wxFlexGridSizer( 3, 4, 20 ); wxFlexGridSizer *subpanel_sub_sizer = new wxFlexGridSizer( 2, 4, 20 ); sap_checkbox = new wxCheckBox( misc_subpanels[ANN_MISC_SOUT],SAPMisc_Event, wxU(_("SAP announce")) ); slp_checkbox = new wxCheckBox( misc_subpanels[ANN_MISC_SOUT],SLPMisc_Event, wxU(_("SLP announce")) ); wxStaticText *label_g = new wxStaticText( misc_subpanels[ANN_MISC_SOUT], -1, wxU(_("Group name")) ); announce_group = new wxTextCtrl( misc_subpanels[ANN_MISC_SOUT], AnnounceGroup_Event, wxT(""), wxDefaultPosition, wxSize( 200, -1 ), wxTE_PROCESS_ENTER); wxStaticText *label = new wxStaticText( misc_subpanels[ANN_MISC_SOUT], -1, wxU(_("Channel name")) ); announce_addr = new wxTextCtrl( misc_subpanels[ANN_MISC_SOUT], AnnounceAddr_Event, wxT(""), wxDefaultPosition, wxSize( 200, -1 ), wxTE_PROCESS_ENTER); subpanel_sizer->Add( sap_checkbox, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subpanel_sizer->Add( slp_checkbox, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subpanel_sub_sizer->Add( label_g, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subpanel_sub_sizer->Add( announce_group, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL ); subpanel_sub_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subpanel_sub_sizer->Add( announce_addr, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL ); subpanel_sizer->Add( subpanel_sub_sizer, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL ); misc_subpanels[ANN_MISC_SOUT]->SetSizerAndFit( subpanel_sizer ); /* Stuff everything into the main panel */ panel_sizer->Add( misc_subpanels[ANN_MISC_SOUT], 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT, 5 ); sout_all_checkbox = new wxCheckBox( panel, SoutAll_Event, wxU(_("Select all elementary streams")) ); panel_sizer->Add( sout_all_checkbox, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT, 5 ); panel->SetSizerAndFit( panel_sizer ); /* Update misc panel */ misc_subpanels[ANN_MISC_SOUT]->Disable(); announce_group->Disable(); announce_addr->Disable(); return panel;}wxPanel *SoutDialog::EncapsulationPanel( wxWindow* parent ){ unsigned int i; wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition, wxSize(200, 200) ); wxStaticBox *panel_box = new wxStaticBox( panel, -1, wxU(_("Encapsulation Method")) ); wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box, wxHORIZONTAL ); static const wxString encapsulation_array[] = { wxT("MPEG TS"), wxT("MPEG PS"), wxT("MPEG 1"), wxT("Ogg"), wxT("ASF"), wxT("MP4"), wxT("MOV"), wxT("WAV"), wxT("Raw") }; /* Stuff everything into the main panel */ for( i = 0; i < WXSIZEOF(encapsulation_array); i++ ) { encapsulation_radios[i] = new wxRadioButton( panel, EncapsulationRadio1_Event + i, encapsulation_array[i] ); panel_sizer->Add( encapsulation_radios[i], 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 4 ); } /* Hide avi one */ for( i = WXSIZEOF(encapsulation_array); i < ENCAPS_NUM; i++ ) { encapsulation_radios[i] = new wxRadioButton( panel, EncapsulationRadio1_Event + i, wxT("") ); encapsulation_radios[i]->Hide(); } panel->SetSizerAndFit( panel_sizer ); /* Update encapsulation panel */ encapsulation_radios[TS_ENCAPSULATION]->SetValue(true); i_encapsulation_type = TS_ENCAPSULATION; return panel;}wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent ){ wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition, wxSize(200, 200) ); wxStaticBox *panel_box = new wxStaticBox( panel, -1, wxU(_("Transcoding options")) ); wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box, wxVERTICAL ); /* Create video transcoding checkox */ static const wxString wxvcodecs_array[] = { wxT("mp1v"), wxT("mp2v"), wxT("mp4v"), wxT("DIV1"), wxT("DIV2"), wxT("DIV3"), wxT("H263"), wxT("h264"), wxT("I263"), wxT("WMV1"), wxT("WMV2"), wxT("MJPG"), wxT("theo") }; /* static const wxString vbitrates_array[] = { wxT("3072"), wxT("2048"), wxT("1024"), wxT("768"), wxT("512"), wxT("384"), wxT("256"), wxT("192"), wxT("128"), wxT("96"), wxT("64"),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -