2011-09-01 3 views
3

비디오 스트림이있는 응용 프로그램을 만들려고하고 있습니다. 이제 서버에서 클라이언트로 한 이미지 만 보낼 수 있습니다. 클라이언트에서 하나 이상의 이미지를 보내려고하면 "매개 변수가 유효하지 않습니다."라는 오류 메시지가 나타납니다. pictureBox1.Image = 새로운 비트 맵 (ms);C# 비디오 스트리밍

클라이언트 측 코드 :

while((data = cliente.receiveImage()) != null) 
{ 

    ms = new MemoryStream(data); 
    pictureBox1.Image = new Bitmap(ms); 
    ms.Close(); 

} 

서버 측 코드 (이러한 코드는 연속적으로 반복된다)

servidor.sendImage(ms.GetBuffer()); 

답변

3

ms.GetBuffer()은 추가하지 않는 부분을 포함하는 메모리 스트림의 전체 버퍼를 리턴한다.
ToArray()으로 전화해야 실제 내용 만 반환됩니다.

(또는 당신의 데이터는 sendImage 또는 receiveImage의 문제로, 다른 이유로 유효하지 않을 수도 있습니다)

1

이미지 일 - 까다 롭고을 NIT있다, 당신은을 포함하는 바이트의 전체 세트를 가지고해야 이미지를 재구성합니다.

클라이언트 오브젝트가 데이터를 수신 할 때 전체 이미지가 아니라 전체 이미지로 구성된 청크로 표시되는 것이 문제입니다. 이로 인해 단순히 전체 이미지의 바이트가 없기 때문에

pictureBox1.Image = new Bitmap(ms); 

의 줄이 실패하게됩니다.

는 대안

  • 오히려 클라이언트에 밖으로 서버 푸시 이미지를하는 것보다, 아마도 또 다른 방법은 서버에서 클라이언트 끌어 오기 이미지를 가지고하는 것입니다.

  • 기존 스트리밍 메커니즘을 사용하십시오. 저는 개인적으로 C#에서 수동으로 비디오를 스트리밍하는 것이 당신이 협상하는 것보다 더 복잡 할 수 있다고 생각합니다. 자신의 글을 쓰는 대신 비디오를 스트리밍하기 위해 기존 구성 요소 나 응용 프로그램을 사용하는 것이 겸허하게 권장됩니다. 이미 많은 다른 옵션이 있습니다 (wmv, 플래시 및 기타 100 개). 다시 발명 할 필요가없는 휠을 재발 명하고 있습니다.