private void Form1_Load(object sender, EventArgs e) { OysterEncoderController.Control cc = new OysterEncoderController.Control("localhost", 22571); cc.Open(); if (cc.IsRecording) { } }
private void UpdateEncoderList() { _event.WaitOne(); _event.Reset(); foreach (ListViewItem lvi in listView1.Items) { if (_done) break; StreamingEncoder encoder = (StreamingEncoder) lvi.Tag; try { Control oec = new Control(encoder.ControlAddress, encoder.ControlPort); lvi.SubItems[3].Text = "Connecting"; Application.DoEvents(); if (oec.Open()) { if (oec.IsRecording) { lvi.SubItems[2].Text = "Yes"; lvi.BackColor = Color.Cornsilk; Application.DoEvents(); } else { lvi.SubItems[2].Text = "No"; lvi.BackColor = Color.White; Application.DoEvents(); } oec.Close(); lvi.SubItems[3].Text = "Ready..."; lvi.Font = new Font(lvi.Font, FontStyle.Regular); Application.DoEvents(); } else { IPAddress ipAddress; if (encoder.ControlAddress.Split(new char[] {'.'}).Length != 3) { IPHostEntry hostEntry = Dns.GetHostEntry(encoder.ControlAddress); ipAddress = hostEntry.AddressList[0]; } else { byte[] addressBytes = ASCIIEncoding.ASCII.GetBytes(encoder.ControlAddress); ipAddress = new IPAddress(addressBytes); } Icmp ping = new Icmp(ipAddress); if (ping.Ping() > TimeSpan.FromMilliseconds(5000.0)) { lvi.SubItems[2].Text = "???"; lvi.SubItems[3].Text = "Possibly disabled. Needs to be power cycled."; lvi.ForeColor = Color.LightGray; lvi.Font = new Font(lvi.Font, FontStyle.Bold); Application.DoEvents(); } else { lvi.Font = new Font(lvi.Font, FontStyle.Regular); lvi.SubItems[2].Text = "Yes"; lvi.SubItems[3].Text = "Encoder refused connection. Usually means it is recording..."; lvi.BackColor = Color.Cornsilk; Application.DoEvents(); } } } catch (Exception e) { lvi.ForeColor = Color.LightGray; lvi.SubItems[3].Text = "Offline"; } Application.DoEvents(); } _event.Set(); Application.DoEvents(); }
private void button1_Click(object sender, EventArgs e) { if (listView1.CheckedItems.Count > 0 && MessageBox.Show(this, "Are you sure you want to restart the selected encoders?", "Restart requested...", MessageBoxButtons.YesNo) == DialogResult.Yes) { button1.Enabled = false; button2.Enabled = false; Cursor savedCursor = Cursor; Cursor = Cursors.WaitCursor; _event.WaitOne(); _event.Reset(); foreach (ListViewItem lvi in listView1.CheckedItems) { if (_done) break; StreamingEncoder encoder = (StreamingEncoder) lvi.Tag; Control oec = new Control(encoder.ControlAddress, encoder.ControlPort); bool success = false; lvi.SubItems[3].Text = "Attempting to Restart..."; lvi.SubItems[2].Text = "No"; Application.DoEvents(); if (oec.Open()) { if (oec.IsRecording) { lvi.SubItems[2].Text = "Yes"; lvi.SubItems[3].Text = "Recording will NOT be saved!"; } Application.DoEvents(); Connection cn = oec.Connection; lvi.SubItems[3].Text = "Connected, sending command..."; Application.DoEvents(); Command retcmd = cn.SendCommandWaitForResponse(new Command("RBT", "0")); if (retcmd == null) { lvi.SubItems[3].Text = "Received an invalid response: <null>"; } else { if (retcmd.Params.Length > 0) { if (retcmd.Params[0].Equals("OK")) { lvi.SubItems[3].Text = "Sent restart command successfully."; success = true; } Application.DoEvents(); } if (!success) { lvi.SubItems[3].Text = "Received an invalid response: " + retcmd.RawData; Application.DoEvents(); } } oec.Close(); } else { lvi.SubItems[3].Text = "Could not connect..."; } Application.DoEvents(); } Cursor = savedCursor; _event.Set(); button1.Enabled = true; button2.Enabled = true; } Application.DoEvents(); }
bool Test() { string stest, srslt, stemp; bool bReturn = true; m_oec = new OysterEncoderController.Control(m_sServerAddress,m_iPort); // open a connection stest = "open a connection"; if (m_oec.Open()) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); /* // list all files on the device stest = "list all files on the device"; if (m_oec.RequestFileList()) { srslt = "passed"; } else { srslt = "failed"; } Console.WriteLine(stest + ": " + srslt); */ // generate a filename and save it string sFilename = System.Guid.NewGuid().ToString(); // start a recording with generated filename stest = "StartRecording"; if (m_oec.StartRecording(sFilename)) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // get RunState stest = "get RunState"; srslt = m_oec.RunState; if (srslt != null) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // get ArchiveState stest = "get ArchiveState"; srslt = m_oec.ArchiveState; if (srslt != null) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // check IsRecording stest = "check IsRecording"; if (m_oec.IsRecording) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // stop the recording stest = "StopRecording"; if (m_oec.StopRecording()) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); /* // list all files on the device stest = "list all files on the device"; if (m_oec.RequestFileList()) { srslt = "passed"; } else { srslt = "failed"; } Console.WriteLine(stest + ": " + srslt); */ // set FilePath stest = "set FilePath"; stemp = @"C:\OysterMedia"; m_oec.FilePath = stemp; if (m_oec.LastError == string.Empty) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // set Profile (NOT IMPLEMENTED) // get ArchiveState stest = "get ArchiveState"; srslt = m_oec.ArchiveState; if (srslt != null) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // get RunState stest = "get RunState"; srslt = m_oec.RunState; if (srslt != null) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // get FilePath stest = "get FilePath"; srslt = m_oec.FilePath; if (srslt != null) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // get Profile stest = "get Profile"; srslt = m_oec.Profile; if (srslt != null) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // get AllProperties stest = "get AllProperties"; srslt = m_oec.AllProperties; if (srslt != null) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); // close the connection stest = "close the connection"; if (m_oec.Close()) { srslt = "passed"; } else { srslt = "failed"; bReturn = false; } Console.WriteLine(stest + ": " + srslt); m_oec = null; return bReturn; }
private void btnStart_Click(object sender, System.EventArgs e) { string sName = System.Guid.NewGuid().ToString(); if(cbCamera1.Checked) { m_OEC1 = new OysterEncoderController.Control(Source1.ControlAddress,Source1.ControlPort); } if(cbCamera2.Checked) { m_OEC2 = new OysterEncoderController.Control(Source2.ControlAddress,Source2.ControlPort); } try { if(m_OEC1 != null) { if(!m_OEC1.Open()) { MessageBox.Show("Unable to connect to " + Source1.Description + " Encoder is either in use or offline.","Oyster Event Notification"); MessageBox.Show("Recording session aborted.","Oyster Event Notification"); goto CleanUp; } } if(m_OEC2 != null) { if(!m_OEC2.Open()) { MessageBox.Show("Unable to connect to " + Source2.Description + " Encoder is either in use or offline.","Oyster Event Notification"); MessageBox.Show("Recording session aborted.","Oyster Event Notification"); goto CleanUp; } } } catch(Exception Err) { MessageBox.Show(Err.Message,"Oyster Event Notification"); MessageBox.Show("Recording session aborted.","Oyster Event Notification"); goto CleanUp; } if(m_OEC1 != null) { if(!m_OEC1.StartRecording(System.Guid.NewGuid().ToString())) { MessageBox.Show("Unabled to start recording","Oyster Event Notification"); MessageBox.Show("Recording session aborted.","Oyster Event Notification"); goto CleanUp; } if(!m_OEC2.StartRecording(System.Guid.NewGuid().ToString())) { MessageBox.Show("Unabled to start recording","Oyster Event Notification"); MessageBox.Show("Recording session aborted.","Oyster Event Notification"); goto CleanUp; } } if(m_OEC1 != null) { m_OEC1.StartRecording(System.Guid.NewGuid().ToString()); } else if((m_OEC1 == null)&&(m_OEC2 == null)) { this.DialogResult = DialogResult.Cancel; return; } ElapsedTime.Enabled = true; pnlStart.Visible = false; pnlStop.Visible = true; return; CleanUp:{} if(m_OEC1 != null) { try { m_OEC1.StopRecording(); } catch(Exception Err) { string sSeeError = Err.Message; } try { m_OEC1.Close(); } catch(Exception Err) { string sSeeError = Err.Message; } } if(m_OEC2 != null) { try { m_OEC2.StopRecording(); } catch(Exception Err) { string sSeeError = Err.Message; } try { m_OEC2.Close(); } catch(Exception Err) { string sSeeError = Err.Message; } } this.DialogResult = DialogResult.Abort; }
void StartRecording() { frmRecordOptions frm = new frmRecordOptions(); if(!System.IO.Directory.Exists(frm.CurrentRecordOptions.WMVDirectory)) { try { System.IO.Directory.CreateDirectory(frm.CurrentRecordOptions.WMVDirectory); } catch(Exception Err) { MessageBox.Show("Error details:" + Err.Message,"Temporary storage directory does not exist. Creation attempt failed.",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } } frmStatusWindow StatusWindow = new frmStatusWindow("Desktop Recorder: Preparing Session Capture","Please wait..."); bDontClick = true; StatusWindow.Owner = this; StatusWindow.Show(); bool bRecordCamera = true, bRecordScreen = true; // bError = false; int NumCams = 0; string sErrorBody = ""; string sErrorCaption = ""; //btnStartStop.Text = "Preparing..."; //btnStartStop.Update(); Application.DoEvents(); // clock.DigitalDisplayColor = SriClocks.DigitalColor.GreenColor; // clock.ClockDisplayType = SriClocks.ClockType.StopWatch; // clock.Reset(); // btnStartStop.Text = "STOP"; // startup the oyster encoder RecordOptions ro = frm.CurrentRecordOptions; bool bIsSession = false; System.Diagnostics.Debug.Assert(m_oec == null,"OEC should be null when starting a recording."); #region SCREEN SELECTION object oparams = null; ScreenEncoder.CapturePerformance cp = ScreenEncoder.CapturePerformance.VeryLow; ScreenEncoder.CaptureType ct = ScreenEncoder.CaptureType.FullScreen; switch (frm.CurrentRecordOptions.RecordType) { case RecordOptions.ScreenRecordType.ScreenRecordNone: bRecordScreen = false; break; case RecordOptions.ScreenRecordType.ScreenRecordFullScreen: // oparams = "N/A"; /*Changed By Kevin Gray 5-6-05 due to errors in typecasting "N/A" to an object[]*/ oparams = new object[1]; cp = frm.CurrentRecordOptions.ScreenCapturePerformance; ct = ScreenEncoder.CaptureType.FullScreen; bRecordScreen = true; break; case RecordOptions.ScreenRecordType.ScreenRecordWindow: CarverLab.Utility.Win32Wrapper w32 = new CarverLab.Utility.Win32Wrapper(); CarverLab.Utility.Window CapWin = w32[frm.CurrentRecordOptions.WindowTitleToRecord]; cp = frm.CurrentRecordOptions.ScreenCapturePerformance; if (frm.CurrentRecordOptions.WindowTitleToRecord == string.Empty || CapWin == null) { if (System.Windows.Forms.MessageBox.Show(this,"Could not find the specified window entitled: " + frm.CurrentRecordOptions.WindowTitleToRecord + ". Continue and record the full screen instead?", "Record the Entire Screen?",System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question,System.Windows.Forms.MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes) { ct = ScreenEncoder.CaptureType.FullScreen; oparams = "N/A"; } else { if(bRecordCamera) { if (System.Windows.Forms.MessageBox.Show(this,"Would you like to continue recording camera(s)?", "Record Cameras without Screen Capture?",System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question,System.Windows.Forms.MessageBoxDefaultButton.Button1) != System.Windows.Forms.DialogResult.Yes) { bRecordScreen = false; } } } } else { System.Diagnostics.Debug.Assert(CapWin != null,"CapWin should not be null!"); ct = ScreenEncoder.CaptureType.WindowByHandle; oparams = CapWin; } break; default: System.Diagnostics.Debug.Assert(false,"Invalid recording type selected for screen recording."); break; } #endregion #region SET UP FOR SCREEN RECORD if (bRecordScreen) { if (!m_encoder.Execute(ScreenEncoder.Command.SetupEncoder,cp,ct,oparams)) { sErrorBody = "Could not start the screen recording process. This is a serious error. Contact your system administrator."; sErrorCaption = "Screen Recording Failure..."; goto Label_Screen_Error; } Application.DoEvents(); System.Threading.Thread.Sleep(1500); Application.DoEvents(); } #endregion #region CAMERA SELECTION switch (ro.SelectedCamera) { case RecordOptions.CameraSelection.CameraNone: bRecordCamera = false; NumCams = 0; break; case RecordOptions.CameraSelection.CameraOne: NumCams = 1; m_sCameraRecordingName = new string[1]; m_oec = new OysterEncoderController.Control[1]; m_oec[0] = new OysterEncoderController.Control(ro.DefaultOysterDeviceAddress,OysterEncoderController.Control.CameraDefaultPort(1),ref mLogger); if (!m_oec[0].Open()) { sErrorBody = "Could not start the camera one recording process. Camera may be in use or this could be a serious error. Contact your system administrator."; sErrorCaption = "Camera Recording Failure..."; //bRecordCamera = false; //bError = true; //Reset(); goto Label_Camera_Error; } break; case RecordOptions.CameraSelection.CameraTwo: NumCams = 1; m_sCameraRecordingName = new string[1]; m_oec = new OysterEncoderController.Control[1]; m_oec[0] = new OysterEncoderController.Control(ro.DefaultOysterDeviceAddress,OysterEncoderController.Control.CameraDefaultPort(2),ref mLogger); if (!m_oec[0].Open()) { sErrorBody = "Could not start the camera two recording process. Camera may be in use or this could be a serious error. Contact your system administrator."; sErrorCaption = "Camera Recording Failure..."; goto Label_Camera_Error; } break; case RecordOptions.CameraSelection.CameraOneAndTwo: NumCams = 2; bIsSession = true; m_sCameraRecordingName = new string[2]; m_oec = new OysterEncoderController.Control[2]; m_oec[0] = new OysterEncoderController.Control(ro.DefaultOysterDeviceAddress,OysterEncoderController.Control.CameraDefaultPort(1),ref mLogger); if (!m_oec[0].Open()) { sErrorBody = "Could not start the camera one recording process. Camera may be in use or this could be a serious error. Contact your system administrator."; sErrorCaption = "Camera Recording Failure..."; goto Label_Camera_Error; } m_oec[1] = new OysterEncoderController.Control(ro.DefaultOysterDeviceAddress,OysterEncoderController.Control.CameraDefaultPort(2),ref mLogger); if (!m_oec[1].Open()) { sErrorBody = "Could not start the camera two recording process. Camera may be in use or this could be a serious error. Contact your system administrator."; sErrorCaption = "Camera Recording Failure..."; goto Label_Camera_Error; } break; default: System.Diagnostics.Debug.Assert(false,"Invalid SelectedCamera enum"); sErrorBody = "A programmer error detected. Please try reselected the desired camera in the options menu. If problem persist please contact your Administrator."; sErrorCaption = "Programmer Error: Invalid SelectedCamera enum"; //bRecordCamera = false; //bError = true; goto Label_Camera_Error; } #endregion #region Require Oyster Objects //OCL.Oyster oyster = new OCL.Oyster(); OCL.Oyster oyster = new OCL.Oyster(frm.CurrentRecordOptions.DefaultOysterAddress,frm.CurrentRecordOptions.DefaultOysterConnectionPort); OCL.User me = oyster.GetUserById(m_me.ID); OCL.VideoStorageServer vss;// = (OCL.VideoStorageServer)oyster.GetUnassignedObject(OCL.OysterUnassignedObjects.VideoStorageServer); OCL.Scene sce;// = (OCL.Scene)oyster.GetUnassignedObject(OCL.OysterUnassignedObjects.Scene); OCL.Source src = null;// = (OCL.Source)oyster.GetUnassignedObject(OCL.OysterUnassignedObjects.Source); foreach (OCL.Source srcx in oyster.AllVisibleSources(me)) { string shostname = System.Net.Dns.GetHostByAddress(System.Net.IPAddress.Parse(frm.CurrentRecordOptions.DefaultOysterDeviceAddress)).HostName; //strip off domain info if (shostname.IndexOf(".") != -1) { shostname = shostname.Substring(0,shostname.IndexOf(".")); } if (srcx.ControlAddress.ToLower() == shostname.ToLower() || srcx.ControlAddress.ToLower() == frm.CurrentRecordOptions.DefaultOysterDeviceAddress.ToLower()) { src = srcx; break; } } if (src == null) { sErrorBody = "The data for the Oyster Device that was selected for this recording is not configured correctly. Contact the system administrator."; sErrorCaption = "Camera Recording Failure"; //bRecordCamera = false; //bError = true; goto Label_Camera_Error; } sce = src.CurrentScene; vss = sce.AssignedVideoStorageServer; #endregion #region START RECORDING if (bRecordScreen) { if (bRecordCamera) { bIsSession = true; } m_sScreenRecordingName = System.Guid.NewGuid().ToString(); Application.DoEvents(); System.Threading.Thread T = new System.Threading.Thread(new System.Threading.ThreadStart(StartScreenCapture)); T.Start(); //m_encoder.Execute(ScreenEncoder.Command.StartRecording,m_sScreenRecordingName); } if (bRecordCamera) { for (int i = 0; i < m_oec.GetLength(0); i++) { m_sCameraRecordingName[i] = System.Guid.NewGuid().ToString(); m_oec[i].FilePath = vss.OysterRootDirectory; if (m_oec[i].LastError.Length > 0) { sErrorBody = m_oec[i].LastError; sErrorCaption = "Recording Startup Error..."; goto Label_Camera_Error; } m_oec[i].StartRecording(m_sCameraRecordingName[i]); m_oec[i].OnConnectionError +=new OysterEncoderController.Control.OnConnectionErrorHandler(frmDisplay_OnConnectionError); } } #endregion if (bIsSession) { m_sRecordingSessionId = System.Guid.NewGuid().ToString(); } else m_sRecordingSessionId = null; #region Create Database Entries bool bIsPresentation = false; if(bRecordScreen && bRecordCamera) { bIsPresentation = true; } int NumRecordings = NumCams; if(bRecordScreen) NumRecordings++; CurrentRecordingSession = me.CreateASession(DateTime.Now.ToString(),bIsPresentation); CurrentRecordings = new OCL.Recording[NumRecordings]; int iRecIndex = 0; /// Create Camera Recording Entries if(bRecordCamera) { for (int i = 0; i < NumCams; i++) { bool bIsPrimaryCamera; if (i == System.Convert.ToInt32(frm.CurrentRecordOptions.CameraPrimary)) bIsPrimaryCamera = true; else bIsPrimaryCamera = false; CurrentRecordings[iRecIndex] = CurrentRecordingSession.CreateRecording(m_sCameraRecordingName[i] + ".wmv", "Camera " + (i+1),me,sce,src,false,bIsPrimaryCamera); //CurrentRecordings[iRecIndex].UpdateFileSizeOnDisk(); //CurrentRecordings[iRecIndex].Update(TotalTime.ToString()); iRecIndex++; } } /// Create Desktop Recording Entry if(bRecordScreen) { string sRawFileName = m_sScreenRecordingName; string sRName = sRawFileName + ".wmv"; string sFileLocation = frm.CurrentRecordOptions.WMVDirectory + @"\" + sRName; System.IO.FileInfo FID = new System.IO.FileInfo(sFileLocation); m_DesktopRecordingSize = FID.Length; CurrentRecordings[iRecIndex] = CurrentRecordingSession.CreateRecording(sRName,"Presentation", me,sce,src,true,false); //CurrentRecordings[iRecIndex].Update(m_DesktopRecordingSize); //CurrentRecordings[iRecIndex].Update(TotalTime.ToString()); DataRow R = null; string SourceFile = frm.CurrentRecordOptions.WMVDirectory + @"\" + sRName; try { R = dsFileTransfer.Tables["File"].NewRow(); R["ObjectID"] = CurrentRecordings[iRecIndex].ID; R["OysterObjectTypeID"]= 2; //Recording Type R["RecordingSessionID"] = CurrentRecordings[iRecIndex].SessionID; R["UserID"] = m_me.ID; R["UserDescription"]= m_me.Description; R["VideoStorageServerID"]= vss.ID; R["OysterServerAddress"] = frm.CurrentRecordOptions.DefaultOysterAddress; R["SourceFile"] = frm.CurrentRecordOptions.WMVDirectory + @"\" + sRName; R["DestinationFileName"] = sRName; R["DeleteAfterTransfer"] = true; dsFileTransfer.Tables["File"].Rows.Add(R); dsFileTransfer.Tables["File"].AcceptChanges(); dsFileTransfer.WriteXml(frm.CurrentRecordOptions.WMVDirectory + @"\" + sRawFileName + ".xml"); } catch(Exception Err) { MessageBox.Show(Err.Message,"Programmer Error during writing xml"); } } #endregion clock.DigitalDisplayColor = SriClocks.DigitalColor.GreenColor; clock.ClockDisplayType = SriClocks.ClockType.StopWatch; clock.Reset(); btnStartStop.Text = "STOP"; btnStartStop.Enabled = true; clock.StartTimer(); StartRecordingTime = DateTime.Now; m_bRecording = true; m_ScreenIsCaptured = bRecordScreen; m_CameraIsCaptured = bRecordCamera; this.TopMost = false; bDontClick = false; StatusWindow.Hide(); StatusWindow.Dispose(); return; Label_Camera_Error: { bDontClick = false; StatusWindow.Hide(); StatusWindow.Dispose(); System.Windows.Forms.MessageBox.Show(this,sErrorBody, sErrorCaption,System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); if(m_oec != null) { for(int i=0; i< m_oec.Length;i++) { m_oec[i] = null; } m_oec = null; } Reset(); m_CameraIsCaptured = false; m_ScreenIsCaptured = false; this.TopMost = true; return; } Label_Screen_Error: { bDontClick = false; StatusWindow.Hide(); StatusWindow.Dispose(); System.Windows.Forms.MessageBox.Show(this,sErrorBody, sErrorCaption,System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); if(m_oec != null) { for(int i=0; i< m_oec.Length;i++) { m_oec[i].StopRecording(); m_oec[i].Close(); m_oec[i] = null; } m_oec = null; } m_CameraIsCaptured = false; m_ScreenIsCaptured = false; Reset(); this.TopMost = true; return; } }