/// <summary> /// Takes an prepopulated IDataReader and creates an array of VideoEncoderQueues /// </summary> public static List<VideoEncoderQueue> PopulateObject(IDataReader dr) { ColumnFieldList list = new ColumnFieldList(dr); List<VideoEncoderQueue> arr = new List<VideoEncoderQueue>(); VideoEncoderQueue obj; while (dr.Read()) { obj = new VideoEncoderQueue(); if (list.IsColumnPresent("VideoEncoderQueueID")) { obj._videoEncoderQueueID = (int)dr["VideoEncoderQueueID"]; } if (list.IsColumnPresent("VideoID")) { obj._videoID = (int)dr["VideoID"]; } if (list.IsColumnPresent("VideoInputFile")) { obj._videoInputFile = (string)dr["VideoInputFile"]; } if (list.IsColumnPresent("VideoOutputFile")) { obj._videoOutputFile = (string)dr["VideoOutputFile"]; } if (list.IsColumnPresent("ThumbnailOutputFile")) { obj._thumbnailOutputFile = (string)dr["ThumbnailOutputFile"]; } if (list.IsColumnPresent("Status")) { obj._status = (int)dr["Status"]; } if (list.IsColumnPresent("Error")) { obj._error = (string)dr["Error"]; } arr.Add(obj); } dr.Close(); return arr; }
public void EncodeNextVideo(VideoEncoderQueue videoEnc) { Video video = null; try { video = new Video(videoEnc.VideoID); DateTime Start = DateTime.Now; Console.WriteLine("Begin encoding"); string UserDirectory = @"\\www\user\"; //string UserDirectory = @"d:\Source3\Web\user\"; string InputFileName = UserDirectory + videoEnc.VideoInputFile; string OutputFileName = UserDirectory + videoEnc.VideoOutputFile; string ThumbnailLocation = UserDirectory + videoEnc.ThumbnailOutputFile; Turbine.TVE3 tve = new Turbine.TVE3(); // set license keys: tve.Key1 = 215362640; tve.Key2 = 1596049317; // load the base preset settings: tve.LoadSettings(@"c:\presets\300K_Broadband.settings"); tve.VideoMethod = "VBR2"; tve.VideoBitRate = 300000; // set output type (flv or swf) and output location: tve.OutputFormat = "fla"; tve.SetOutputFile(OutputFileName); // encode source synchronously: tve.EncodeAsync(InputFileName); DateTime encStart = DateTime.Now; bool EncodeOKAY = true; while (tve.EncodeAsyncIsEncoding && EncodeOKAY) { Console.WriteLine(tve.EncodeAsyncPercentage.ToString() + "% Complete"); Application.DoEvents(); if (encStart > DateTime.Now.AddMinutes(1) && tve.EncodeAsyncPercentage == 1) { EncodeOKAY = false; } Thread.Sleep(300); } // done - flush encoding: tve.EncodeFlush(); tve.InfoOpen(InputFileName); decimal Duration = 0.0M; try { int DurationMS = (int)tve.InfoGet("totalDurationMs"); TimeSpan DurationSpan = new TimeSpan(0, 0, 0, 0, DurationMS); Duration = decimal.Parse(DurationSpan.Minutes + "." + DurationSpan.Seconds); } catch { } tve.InfoSaveInputFrame(2000, ThumbnailLocation, 100); Photo.ResizeTo124x91(videoEnc.ThumbnailOutputFile); // open video again to make sure no changes have been missed video = new Video(videoEnc.VideoID); if (EncodeOKAY) { videoEnc.Status = (int)VideoEncoderStatus.Completed; video.Status = (int)VideoStatus.Active; } else { videoEnc.Status = (int)VideoEncoderStatus.Errored; videoEnc.Error = "Encoder Stalled"; video.Status = (int)VideoStatus.EncoderError; } video.Duration = Convert.ToDecimal(Duration); DateTime End = DateTime.Now; TimeSpan EncodingTime = End - Start; Console.WriteLine("Successfully encoded " + Duration.ToString() + " in " + EncodingTime.ToString()); tve.Dispose(); videoEnc.Save(); video.Save(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); videoEnc.Status = (int)VideoEncoderStatus.Errored; videoEnc.Error = ex.ToString(); videoEnc.Save(); if (video != null) { video.Status = (int)VideoStatus.EncoderError; video.Save(); } } finally { } Console.WriteLine("Finished Encoding"); }
/// <summary> /// Saves the video file to disk /// </summary> /// <returns></returns> public static void QueueVideoForEncoding(Video video, Stream FLVStream, string Extension, Member member, string VideoTitle) { if (VideoTitle.Length > 35) { VideoTitle = VideoTitle.Substring(0, 35); } string VideoFileName = UniqueID.NewWebID(); string VideoPreprocessedInputFile = OSRegistry.GetDiskUserDirectory() + member.NickName + @"\video\" + VideoFileName + "." + Extension; string VideoInputFile = member.NickName + @"\video\" + VideoFileName + "." + Extension; string VideoOutputFile = member.NickName + @"\video\" + VideoFileName + ".flv"; int Length = 256; Byte[] buffer = new Byte[256]; int bytesRead = FLVStream.Read(buffer, 0, Length); FileStream fs = new FileStream(VideoPreprocessedInputFile, FileMode.Create); // write the required bytes while (bytesRead > 0) { fs.Write(buffer, 0, bytesRead); bytesRead = FLVStream.Read(buffer, 0, Length); } FLVStream.Close(); fs.Flush(); fs.Close(); ResourceFile VideoResourceFile = new ResourceFile(); VideoResourceFile.WebResourceFileID = UniqueID.NewWebID(); VideoResourceFile.FileName = VideoFileName + ".flv"; VideoResourceFile.Path = @"/" + member.NickName + @"/video/"; VideoResourceFile.ResourceType = (int)ResourceFileType.Video; VideoResourceFile.Save(); string ThumbnailName = UniqueID.NewWebID() + ".jpg"; string ThumbnailSavePath = member.NickName + @"\vthmb\" + ThumbnailName; ResourceFile ThumbnailResourceFile = new ResourceFile(); ThumbnailResourceFile.WebResourceFileID = UniqueID.NewWebID(); ThumbnailResourceFile.FileName = ThumbnailName; ThumbnailResourceFile.Path = member.NickName + @"/vthmb/"; ThumbnailResourceFile.ResourceType = (int)ResourceFileType.VideoThumbnail; ThumbnailResourceFile.Save(); video.MemberID = member.MemberID; video.WebVideoID = UniqueID.NewWebID(); video.Category = 1; video.DTCreated = DateTime.Now; video.VideoResourceFileID = VideoResourceFile.ResourceFileID; video.ThumbnailResourceFileID = ThumbnailResourceFile.ResourceFileID; video.Status = (int)VideoStatus.EncoderQueue; video.Save(); // update the number of photos MemberProfile memberProfile = member.MemberProfile[0]; memberProfile.NumberOfVideos++; memberProfile.Save(); VideoEncoderQueue VideoEncode = new VideoEncoderQueue(); VideoEncode.VideoID = video.VideoID; VideoEncode.VideoInputFile = VideoInputFile; VideoEncode.VideoOutputFile = VideoOutputFile; VideoEncode.ThumbnailOutputFile = ThumbnailSavePath; VideoEncode.Status = (int)VideoEncoderStatus.Ready; VideoEncode.Save(); }
/// <summary> /// Saves the video file to disk /// </summary> /// <returns></returns> public static void QueueVideoForEncoding(Video video, Stream FLVStream,string Extension, Member member, string VideoTitle) { if (VideoTitle.Length > 35) { VideoTitle = VideoTitle.Substring(0, 35); } string VideoFileName = UniqueID.NewWebID(); string VideoPreprocessedInputFile = OSRegistry.GetDiskUserDirectory() + member.NickName + @"\video\" + VideoFileName + "." + Extension; string VideoInputFile = member.NickName + @"\video\" + VideoFileName + "." + Extension; string VideoOutputFile = member.NickName + @"\video\" + VideoFileName + ".flv"; int Length = 256; Byte[] buffer = new Byte[256]; int bytesRead = FLVStream.Read(buffer, 0, Length); FileStream fs = new FileStream(VideoPreprocessedInputFile, FileMode.Create); // write the required bytes while (bytesRead > 0) { fs.Write(buffer, 0, bytesRead); bytesRead = FLVStream.Read(buffer, 0, Length); } FLVStream.Close(); fs.Flush(); fs.Close(); ResourceFile VideoResourceFile = new ResourceFile(); VideoResourceFile.WebResourceFileID = UniqueID.NewWebID(); VideoResourceFile.FileName = VideoFileName + ".flv"; VideoResourceFile.Path = @"/" + member.NickName + @"/video/"; VideoResourceFile.ResourceType = (int)ResourceFileType.Video; VideoResourceFile.Save(); string ThumbnailName = UniqueID.NewWebID() + ".jpg"; string ThumbnailSavePath = member.NickName + @"\vthmb\" + ThumbnailName; ResourceFile ThumbnailResourceFile = new ResourceFile(); ThumbnailResourceFile.WebResourceFileID = UniqueID.NewWebID(); ThumbnailResourceFile.FileName = ThumbnailName; ThumbnailResourceFile.Path = member.NickName + @"/vthmb/"; ThumbnailResourceFile.ResourceType = (int)ResourceFileType.VideoThumbnail; ThumbnailResourceFile.Save(); video.MemberID = member.MemberID; video.WebVideoID = UniqueID.NewWebID(); video.Category = 1; video.DTCreated = DateTime.Now; video.VideoResourceFileID = VideoResourceFile.ResourceFileID; video.ThumbnailResourceFileID = ThumbnailResourceFile.ResourceFileID; video.Status = (int)VideoStatus.EncoderQueue; video.Save(); // update the number of photos MemberProfile memberProfile = member.MemberProfile[0]; memberProfile.NumberOfVideos++; memberProfile.Save(); VideoEncoderQueue VideoEncode = new VideoEncoderQueue(); VideoEncode.VideoID = video.VideoID; VideoEncode.VideoInputFile = VideoInputFile; VideoEncode.VideoOutputFile = VideoOutputFile; VideoEncode.ThumbnailOutputFile = ThumbnailSavePath; VideoEncode.Status = (int)VideoEncoderStatus.Ready; VideoEncode.Save(); }