我有一臺服務器不斷地傳輸jpeg圖像,如時間推移視頻源。我需要在C#WinForm TCP客戶端中顯示這些圖像,並且遇到流式處理問題。如何讀取從服務器流式傳輸的jpeg圖像
我在這裏和其他網站上閱讀了大量的帖子,但其中沒有一個能夠提供解決方案來解決我的問題。
我有下面的代碼,其目的是從該服務器檢索該圖像並使用PictureBox控件顯示它:(存在圖像流中的頭信息)
while (true)
{
NetworkStream stream = m_client.GetStream(); //Get the data stream from the server
//Load Image
while (stream.DataAvailable)
{
byte[] buffer = new byte[m_client.ReceiveBufferSize];
stream.Read(buffer, 0, buffer.Length);
string tempString = System.Text.Encoding.ASCII.GetString(buffer);
//split header info and data into separate strings
string[] splitString = tempString.Split(new string[] { "]" }, 2, StringSplitOptions.None);
splitString[0] = splitString[0].Replace(@"\", "");
//split header info into separate strings for use later
string[] imageInfo = splitString[0].Split('|');
int size = Convert.ToInt32(tempString.Length);
//int offset = splitString[0].Length;
buffer = new byte[size];
stream.Read(buffer, 0, buffer.Length);
//Convert Image Data To Image
MemoryStream imageStream = new MemoryStream(buffer, 0, buffer.Length);
imageStream.Position = 0;
Bitmap img = new Bitmap(imageStream);
//set the image display box properties
VideoBox.Width = img.Width;
VideoBox.Height = img.Height;
VideoBox.Image = img; //Show the image in the picturebox
}
stream.Flush();
}
目前這個代碼運行,只要到Bitmap img = new Bitmap(imageStream);
它給出的參數是無效的錯誤。
這是我第一次做這個,所以在接下來的嘗試中有點失落,我花了最後一天嘗試不同的解決方案,但這個似乎是迄今爲止最好的(我認爲:s )。
我將不勝感激,如果任何人都可以指出我做錯了或失蹤。
服務器是否使用單個TCP連接傳輸多個圖像? – empi
我無法訪問源代碼,但據我所知,它通過單個連接以連續的週期發送多個圖像。 – enigma20
我有這樣的信息:視頻協議示例\ [VIDEO-FAULT \ | 2204771255 \],視頻幀數據包示例\ [JPEG-VIDEO \ | C2013 \ | FrameWidth \ | FrameHeight \ | DateTime \ | ImageDataSize \] ... ImageDataSize binary bytes形成圖像 – enigma20