public WTVStreamingVideoResult(DSStreamResultCodes resultCode, string resultString) : this() { ResultCode = resultCode; ResultString = resultString; StreamerID = "000000"; Port = "9081"; }
public DSStreamResultCodes TranscodeFileAsync(string fileName, WTVProfileQuality quality) { FileName = fileName; Quality = quality; WTVStreamingVideoRequest strq = new WTVStreamingVideoRequest(FileName, quality, TimeSpan.FromSeconds(0)); DSStreamResultCodes result = InitWithFile(strq); if (result != DSStreamResultCodes.OK) { return(result); // ...and stop } Thread th = new Thread(new ThreadStart(DoTranscodeFileAsync)); th.Name = "TranscodeFile1"; th.Start(); return(DSStreamResultCodes.OK); }
public WTVStreamingVideoResult(DSStreamResultCodes resultCode) : this(resultCode, "") { }
// Main public method - Begin Streaming public WTVStreamingVideoResult StreamWithFileAndPort(WTVStreamingVideoRequest svrq, int streamPort, bool removeReferenceClock, bool autodetectPal) { WTVStreamingVideoResult result = new WTVStreamingVideoResult(); // Attempting this port result.Port = streamPort.ToString(); // Store values locally for use by other class methods StreamingRequest = svrq; StreamPort = streamPort; RemoveReferenceClock = removeReferenceClock; // Build the graph using the base class DSStreamResultCodes resultCode = base.InitWithFile(StreamingRequest); if (resultCode != DSStreamResultCodes.OK) { return(new WTVStreamingVideoResult(resultCode)); } // Add streaming try { AddStreamSinkToCurrentOutputFilter(StreamPort); } catch (Exception ex) { result.ResultCode = DSStreamResultCodes.ErrorAlreadyStreaming; result.ResultString = ex.Message; return(result); } // Remove clock? try { if (RemoveReferenceClock) { RemoveRefClockFromGraph(); } } catch (Exception ex) { result.ResultCode = DSStreamResultCodes.Error; result.ResultString = "Error removing reference clock: " + ex.Message; return(result); } // Seek? try { if (StreamingRequest.StartAt.TotalSeconds > 0) { SeekGraphToTime(StreamingRequest.StartAt); } else { SeekGraphToTime(TimeSpan.FromSeconds(5)); // EXPERIMENTAL } } catch { // Ignore non-seeking errors for now } // Begin streaming the graph in a separate thread graphStartedEvent.Reset(); thStreamThread = new Thread(new ThreadStart(DoStreamWithFileAndPort)); thStreamThread.SetApartmentState(ApartmentState.MTA); // NetworkSink fails in STA threads - avoid! thStreamThread.Name = "StreamFile1"; thStreamThread.Start(); // Wait for graph to attempt to start so we can report back bool gotSignal = (graphStartedEvent.WaitOne(6000)); if (gotSignal) { if (graphIsRunning) { result.ResultCode = DSStreamResultCodes.OK; return(result); } else { result.ResultCode = DSStreamResultCodes.Error; result.ResultString = "DSStreamer: Graph could not run - see server log for more information."; return(result); } } else { result.ResultCode = DSStreamResultCodes.Error; result.ResultString = "DSStreamer: Timed out waiting for graph to run - there may be more information in the server log."; return(result); } }