On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



ссылка на сообщение  Отправлено: 20.07.10 19:55. Заголовок: Получение видео потока c 9060A-SL VB .NET


Здравствуйте! Хочу получить видео с камеры из-под visual basic .net. Получаю 2-3 картинки после чего генерируется исключение ArgumentException "Недопустимый параметр". Такое же исключение генерируется, если резко изменить сцену перед камерой, например, помахать рукой. В коде я указал в каком месте оно возникает. В чем может быть проблема?
 
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Drawing
Imports System.IO

'Класс для использования IP камеры
Public Class CameraIP
Private Const bytesToRead As Integer = 128
Private Const buferLength As Integer = 130720 '1кБ
Private Const startByte As Byte = &HFF
Private Const secondByte As Byte = &HD8
Private Const lastByte As Byte = &HD9

Private camSocket As Socket
'Буфер для считывания изображения
Private buffer(buferLength) As Byte
'Количество байт изображения считанных в буфер
Private bufferPos As Integer
'True если уже началось считывание очередного изображения
Private startImage As Boolean

Public Sub New(ByVal IP As String, ByVal port As Integer, ByVal login As String, ByVal password As String)
bufferPos = 0
startImage = False
camSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)
camSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5)
Try
camSocket.Connect(IP, port)
'Посылаем http запрос на чтение видео
Dim message As String = "GET " & "/cgi-bin/Stream?Video?UserName=" & login & "&PassWord=" & password & " HTTP/1.0"
Dim ascii As New ASCIIEncoding()
Dim request As Byte() = ascii.GetBytes(message)
camSocket.Send(request, request.Length, SocketFlags.None)
buffer(0) = 13
buffer(1) = 10
camSocket.Send(buffer, 2, SocketFlags.None)
message = "User-Agent: BECKHOFF-Automation VERSION"
camSocket.Send(buffer, 2, SocketFlags.None)
message = "Connection: close"
camSocket.Send(buffer, 2, SocketFlags.None)
Catch e As SocketException
camSocket = Nothing
Debug.WriteLine(e.Message)
Debug.Assert(Connected)
End Try
End Sub

Public Function GetImage(ByRef image As Image) As Boolean
Dim res, i, temp As Integer
Dim endImage As Boolean = False 'встречен конец изображения
Do
'Читаем из входного потока по bytesToRead байт
res = camSocket.Receive(buffer, bufferPos, bytesToRead, SocketFlags.None)
temp = bufferPos + res - 1
i = bufferPos
'Если уже началось считывание изображения
If startImage Then
Do Until i > temp Or endImage
'JPG картинка в MJPEG потоке заканчивается 2 байтами 0xFFD9
If buffer(i) = startByte And buffer(i + 1) = lastByte Then
endImage = True
Else
i += 1
End If
Loop
Else
'Читаем поток пока не встретим начальные байты
Do Until i > temp Or startImage
'JPG картинка в MJPEG потоке начинается 2 байтами 0xFFD8
If buffer(i) = startByte And buffer(i + 1) = secondByte Then
startImage = True
Else
i += 1
End If
Loop
'Если встретилось начало картинки, перемещаем уже считанные байты в начало буфера
If startImage Then
res -= i - bufferPos
For temp = 0 To res
buffer(temp) = buffer(temp + i)
Next temp
End If
End If
bufferPos += res
Loop Until endImage And res >= 0
If endImage Then
i += 2
'Исключение генерируется после вызова следующей функции
image = Bitmap.FromStream(New MemoryStream(buffer, 0, i))
temp = i
startImage = False
'Проверим нет ли начала изображения в оставшихся считанных байтах
Do Until temp > bufferPos Or startImage
If buffer(temp) = startByte And buffer(temp + 1) = secondByte Then
startImage = True
Else
temp += 1
End If
Loop
temp = bufferPos - i
bufferPos -= res
'Если началось считывание очередного изображения, поместим его в начало буфера
For i = 0 To temp
buffer(i) = buffer(i + bufferPos)
Next i
bufferPos = temp
End If
Return res > 0
End Function

ReadOnly Property Connected() As Boolean
Get
If camSocket Is Nothing Then
Connected = False
Else
Connected = camSocket.Connected
End If
End Get
End Property
End Class



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


постоянный участник


ссылка на сообщение  Отправлено: 20.07.10 20:53. Заголовок: Попробуйте взять люб..


Попробуйте взять любой мастер закачек (встроенный в Opera например), сохранить и проанализировать поток за определенное время. Скорее всего где-то ошибка в коде т.к. программ и написанных непосредственно для этой модели и универсальных наберется с два десятка и ничего похожего не наблюдается. Посмотрите данную<\/u><\/a> ветку, там есть ссылки на примеры.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 20.07.10 22:33. Заголовок: и ещё вопрос: мне во..


и ещё вопрос: мне во время выполнения нужно менять разрешение с 640*480 на 160*120. Как это сделать? Какой запрос нужно послать?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


ссылка на сообщение  Отправлено: 21.07.10 19:24. Заголовок: http://Camera_IP:Por..


Закрыть текущую сессию.
http://Camera_IP:Port/cgi-bin/StreamVideoClose?UserName=User=&PassWord=Pass

Открыть новую с заданным разрешением и качеством.
http://Camera_IP:Port/cgi-bin/Stream?Video?res=Size?qual=Qt?UserName=User=&PassWord=Pass
либо
http://User:Pass@Camera_IP:Port/cgi-bin/Stream?Video?res=Size?qual=Qt

Camera_IP, Port, User и Pass меняем соответственно на IP адрес камеры, порт, логин и пароль администратора.
Size=0 - 640x480, 1 - 320x240, 2 - 160x112;
Qt=50 - Basic, 70 - Normal, 85 - Fine.

Подробнее в SDK<\/u><\/a> и здесь<\/u><\/a>.

PS: Еще один пример работы с потоком
тут<\/u><\/a>.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет