Мое приложение воспроизводит видео с веб-камеры с помощью Aforge Plyer.Теперь я хочу записать это видео.Использование аудио плеера Aforge невозможно.
Можно ли отдельно записать звук и объединить его с записанным видео с помощью проигрывателя Aforge?
Обнаружено, что использование архитектуры Direct Show является способом достижения этой цели.Но будет очень сложно изменить архитектуру в последнее время разработки.Поскольку я не знаю концепций DirectShow и почти 90 процентов моего проекта завершено с помощью проигрывателя Aforge.
Мой текущий код здесь.Он может записывать видео с выбранной веб-камеры с помощью проигрывателя Aforge.Но звук отсутствует
using AForge.Video;
using AForge.Video.DirectShow;
using Accord.Video.FFMPEG;
private FilterInfoCollection VideoCaptureDevices;
private VideoCaptureDevice FinalVideo = null;
private VideoCaptureDeviceForm captureDevice;
private Bitmap video;
private VideoFileWriter FileWriter = new VideoFileWriter();
private SaveFileDialog saveAvi;
private void VideoRecord_Load(object sender, EventArgs e)
{
VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
captureDevice = new VideoCaptureDeviceForm();
}
private void play_Click(object sender, EventArgs e)
{
if (captureDevice.ShowDialog(this) == DialogResult.OK)
{
VideoCaptureDevice videoSource = captureDevice.VideoDevice;
FinalVideo = captureDevice.VideoDevice;
FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
FinalVideo.Start();
}
}
void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
if (butStop.Text == "Stop Record")
{
video = (Bitmap)eventArgs.Frame.Clone();
FileWriter.WriteVideoFrame(video);
}
else
{
video = (Bitmap)eventArgs.Frame.Clone();;
}
}
private void Record_Click(object sender, EventArgs e)
{
saveAvi = new SaveFileDialog();
saveAvi.Filter = "Avi Files (*.avi)|*.avi";
if (saveAvi.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
int h = captureDevice.VideoDevice.VideoResolution.FrameSize.Height;
int w = captureDevice.VideoDevice.VideoResolution.FrameSize.Width;
FileWriter.Open(saveAvi.FileName, w, h, 25, VideoCodec.Default, 5000000);
FileWriter.WriteVideoFrame(video);
butStop.Text = "Stop Record";
}
}
private void stopRecord_Click(object sender, EventArgs e)
{
if (butStop.Text == "Stop Record")
{
butStop.Text = "Stop";
if (FinalVideo == null)
{ return; }
if (FinalVideo.IsRunning)
{
FileWriter.Close();
}
}
else
{
this.FinalVideo.Stop();
FileWriter.Close();
}
}
}
}