private void EncodeEngine(object obj) { // create instance of video reader try { string covert_message = ""; // create instance of video reader //VideoFileReader: Lớp để đọc các tệp video sử dụng thư viện FFmpeg. VideoFileReader reader = new VideoFileReader(); // open video file reader.Open(aviLocation); //read the covert message from the txt file FileStream covertMessageStream = new FileStream(txtLocation, FileMode.Open); StreamReader sR = new StreamReader(covertMessageStream); string line = sR.ReadLine(); while (line != null) { covert_message += line; line = sR.ReadLine(); } covertMessageStream.Close(); sR.Close(); //get the total no of frames //long total_frames = reader.FrameCount; long total_frames = reader.FrameCount; int width = reader.Width; int height = reader.Height; int framerate = reader.FrameRate; // create instance of video writer VideoFileWriter writer = new VideoFileWriter(); // create new video file todotdo codec video //writer.Open("../test.avi", width, height, framerate, VideoCodec.Raw); writer.Open("../test04.avi", width, height, framerate, VideoCodec.Raw); // create a bitmap to save into the video file Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb); //a function that takes in video, selects 10 random frames to hide the covert message, then generates a password, hides the covert message Random HC = new Random(); int[] frames = { HC.Next((int)total_frames), HC.Next((int)total_frames), HC.Next((int)total_frames), HC.Next((int)total_frames), HC.Next((int)total_frames), HC.Next((int)total_frames), HC.Next((int)total_frames), HC.Next((int)total_frames), HC.Next((int)total_frames), HC.Next((int)total_frames) }; //split the message into 10 int message_length = covert_message.Length; int f1 = 0; int f2 = (int)(f1 + (0.1 * message_length)); int f3 = (int)(f2 + (0.1 * message_length)); int f4 = (int)(f3 + (0.1 * message_length)); int f5 = (int)(f4 + (0.1 * message_length)); int f6 = (int)(f5 + (0.1 * message_length)); int f7 = (int)(f6 + (0.1 * message_length)); int f8 = (int)(f7 + (0.1 * message_length)); int f9 = (int)(f8 + (0.1 * message_length)); int f10 = (int)(f9 + (0.1 * message_length)); string[] message_split = { covert_message.Substring(f1, (int)(0.1 * message_length)), covert_message.Substring(f2, (int)(0.1 * message_length)), covert_message.Substring(f3, (int)(0.1 * message_length)), covert_message.Substring(f4, (int)(0.1 * message_length)), covert_message.Substring(f5, (int)(0.1 * message_length)), covert_message.Substring(f6, (int)(0.1 * message_length)), covert_message.Substring(f7, (int)(0.1 * message_length)), covert_message.Substring(f8, (int)(0.1 * message_length)), covert_message.Substring(f9, (int)(0.1 * message_length)), covert_message.Substring(f10), }; int cm_temp = 0; for (int i = 0; i < total_frames; i++) { if (frames.Contains(i)) { Console.WriteLine(message_split[cm_temp]); image = SteganographyHelper.EmbedText(message_split[cm_temp], reader.ReadVideoFrame()); cm_temp += 1; } else { image = reader.ReadVideoFrame(); } // màu đỏ. xóa được. double progress = i / (double)total_frames * 100; _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { encode_progressBar.Value = progress; }); // process the frame somehow writer.WriteVideoFrame(image); // dispose the frame when it is no longer required //todo todo //videoFrame.Dispose(); //VideoFileReader.Dispose(); } reader.Close(); writer.Close(); _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { //442S833S222S444S699S118S285S352S595S201 frames_password_tb.Text = frames[0].ToString() + "S" + frames[1].ToString() + "S" + frames[2].ToString() + "S" + frames[3].ToString() + "S" + frames[4].ToString() + "S" + frames[5].ToString() + "S" + frames[6].ToString() + "S" + frames[7].ToString() + "S" + frames[8].ToString() + "S" + frames[9].ToString(); }); _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { encode_btn.IsEnabled = true; encode_progressBar.Value = 100; me_decode = message_split[0] + message_split[1] + message_split[2] + message_split[3] + message_split[4] + message_split[5] + message_split[6] + message_split[7] + message_split[8] + message_split[9]; MessageBoxResult messageBoxResult = MessageBox.Show("\nNhúng thông điệp thành công.\n" + "\n" + me_decode); encode_progressBar.Value = 0; }); } catch (Exception ex) { _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { encode_btn.IsEnabled = true; MessageBoxResult messageBoxResult = MessageBox.Show(ex.ToString()); }); } }
private void DecodeEngine(object obj) { //46S67S1S2S69S47S94S87S33S62 //442S833S222S444S699S118S285S352S595S201 string[] fStrings; int[] frames = new int[10]; try { _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { fStrings = password_text.Text.Split('S'); frames[0] = int.Parse(fStrings[0]); frames[1] = int.Parse(fStrings[1]); frames[2] = int.Parse(fStrings[2]); frames[3] = int.Parse(fStrings[3]); frames[4] = int.Parse(fStrings[4]); frames[5] = int.Parse(fStrings[5]); frames[6] = int.Parse(fStrings[6]); frames[7] = int.Parse(fStrings[7]); frames[8] = int.Parse(fStrings[8]); frames[9] = int.Parse(fStrings[9]); }); // create instance of video reader try { // create instance of video reader VideoFileReader reader = new VideoFileReader(); // open video file reader.Open(aviLocation); //get the total no of frames long total_frames = reader.FrameCount; int width = reader.Width; int height = reader.Height; int framerate = reader.FrameRate; string decode_covert_message = ""; // read 100 video frames out of it for (int i = 0; i < total_frames; i++) { if (frames.Contains(i)) { decode_covert_message += SteganographyHelper.ExtractText(reader.ReadVideoFrame()); } else { _ = reader.ReadVideoFrame(); } double progress = i / (double)total_frames * 100; _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { decode_progressBar.Value = progress; }); } reader.Close(); _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { _ = MessageBox.Show(me_decode + "\n\nTrích xuất thông điệp thành công.\n"); }); } catch (Exception ex) { _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { _ = MessageBox.Show(ex.ToString()); }); } } catch (Exception myex) { _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { _ = MessageBox.Show("Wrong password " + myex.Message); }); } }
private void decodeEngine(object obj) { //46S67S1S2S69S47S94S87S33S62 string[] fStrings; int[] frames = new int[10]; try { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { fStrings = password_text.Text.Split('S'); frames[0] = int.Parse(fStrings[0]); frames[1] = int.Parse(fStrings[1]); frames[2] = int.Parse(fStrings[2]); frames[3] = int.Parse(fStrings[3]); frames[4] = int.Parse(fStrings[4]); frames[5] = int.Parse(fStrings[5]); frames[6] = int.Parse(fStrings[6]); frames[7] = int.Parse(fStrings[7]); frames[8] = int.Parse(fStrings[8]); frames[9] = int.Parse(fStrings[9]); }); // create instance of video reader try { // create instance of video reader VideoFileReader reader = new VideoFileReader(); // open video file reader.Open(aviLocation); //get the total no of frames long total_frames = reader.FrameCount; //long total_frames = 100; int width = reader.Width; int height = reader.Height; int framerate = reader.FrameRate; string covert_message = ""; // read 100 video frames out of it for (int i = 0; i < 100; i++) { if (frames.Contains(i)) { covert_message += SteganographyHelper.extractText(reader.ReadVideoFrame()); } else { reader.ReadVideoFrame(); } double progress = ((double)i / (double)total_frames) * 100; this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { decode_progressBar.Value = progress; }); } reader.Close(); this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { MessageBox.Show(covert_message + " \n Successful"); }); } catch (Exception ex) { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { MessageBox.Show(ex.ToString()); }); } } catch (Exception myex) { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { MessageBox.Show("Wrong password " + myex.Message); }); } }