Как я могу записать звук вместе с записью видео с проигрывателя Aforge? - PullRequest
0 голосов
/ 23 мая 2019

Мое приложение воспроизводит видео с веб-камеры с помощью 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();
        }
    }
}
}
...