将音频流添加到视频会议应用程序(C#)?

时间:2013-12-01 03:07:12

标签: c# audio video streaming webcam

我对C#比较陌生,我正在设计一个简单的视频/音频流媒体应用程序,其合作伙伴可以在两个网络摄像头之间工作。我需要将音频组件添加到我的合作伙伴的视频中,但我完全不知道如何做到这一点。我理解像ImageByteConverter.cs一样,我需要将音频流转换为字节,然后再转换为声音,并将此功能添加到webcam.cs。任何帮助/指针将不胜感激。

Webcam.cs;

using System;
using System.IO;
using System.Linq;
using System.Text;
using WebCam_Capture;
using System.Windows.Controls;
using System.Collections.Generic;
using System.Windows.Media.Imaging;
using System.Net;
using System.Net.Sockets;
using System.Windows; 

namespace DuckTalk
{
class WebCam
{       
    const int TEXT_VIDEO_NUM = 45674;
    private System.Windows.Controls.TextBox _hostIpAddressBox;


    private WebCamCapture webcam;
    private int FrameNumber = 30;


    public void InitializeWebCam(ref System.Windows.Controls.TextBox hostIpAddressBox)
    {
        webcam = new WebCamCapture();
        webcam.FrameNumber = ((ulong)(0ul));
        webcam.TimeToCapture_milliseconds = FrameNumber;
        webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured);


        _hostIpAddressBox = hostIpAddressBox;            
    }


    void webcam_ImageCaptured(object source, WebcamEventArgs e)
    {
        TcpClient connection = null;
        NetworkStream stream = null;
        byte[] imgBytes;

        try
        {
            //Set up IPAddress
            IPAddress ipAddress = IPAddress.Parse(_hostIpAddressBox.Text);
            IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, TEXT_VIDEO_NUM);

            //Connect to TCP
            connection = new TcpClient();
            connection.Connect(ipLocalEndPoint);

            // Get a client stream for reading and writing. 
            stream = connection.GetStream();

            //Send image as bytes
            imgBytes = ImageByteConverter.ImageToBytes((System.Drawing.Bitmap)e.WebCamImage);
            stream.Write(imgBytes, 0, imgBytes.Length);
        }
        catch (Exception error)
        {
            MessageBox.Show("ERROR: " + error.Message);
        }
        finally
        {
            // Close everything.
            if (connection != null)
                connection.Close();

            if (stream != null)
                stream.Close();
        }            
    }


    public void Start()
    {
        webcam.TimeToCapture_milliseconds = FrameNumber;
        webcam.Start(0);
    }

    public void Stop()
    {
        webcam.Stop();
    }

}
}

这是ImageByteConverter.cs

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Collections.Generic;
using System.Windows.Media.Imaging;


namespace DuckTalk
{
class ImageByteConverter
{               
    public static byte[] ImageToBytes(System.Drawing.Bitmap bitmap)
    {
        byte[] byteArray;

        using (MemoryStream stream = new MemoryStream())
        {
            bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
            stream.Close();

            byteArray = stream.ToArray();
        }

        return byteArray;
    }

    public static BitmapImage BytesToImage(byte[] imgBytes)
    {
        var image = new BitmapImage();

        image.BeginInit();
        image.StreamSource = new System.IO.MemoryStream(imgBytes);
        image.EndInit();

        return image;
    }
}
}

0 个答案:

没有答案