Я пытаюсь получить фотографии с веб-камер. Существует веб-сервис php-python для получения изображений с веб-камер и их обслуживания: он отображает картинку как http://ip/jpeg/camera=1
.
private HttpWebRequest request;
private HttpWebResponse response;
private CookieContainer container;
private Uri uri;
private string _user;
private string _pass;
private string _ip;
//Login code as seen in the previous section should be here
//GetImages is meant to run as a separate thread
private void GetImages(string camNo)
{
//create the GET request for the JPEG snapshot (found at /jpeg on the IP Camera)
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://" + deviceIP + "/jpeg/camera"+camNo);
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = container;
//attempt to get a response from the IP110, event if error
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException e)
{
ConnectionError(new ConnectionErrorEventArgs(e.Message));
}
//Get the stream containing the JPEG image.
Stream stream = response.GetResponseStream();
//Read the stream to memory.
byte[] buffer = new byte[100000];
int read, total = 0;
while ((read = stream.Read(buffer, total, 1000)) != 0)
{
total += read;
}
//create a BMP image from the stream
Bitmap bmp = (Bitmap)Bitmap.FromStream(new MemoryStream(buffer, 0, total));
//send the bmp image to where you would like to display it.
}
... тогда я сохраняю это растровое изображение в формате JPEG в папке. Моя проблема начинается здесь; Я хочу сделать этот процесс как можно быстрее. Я хочу сделать снимки с 50 веб-камер, используя этот код, и сохранить их в формате JPEG, и это должно быть быстро - я имею в виду, что каждые 10 секунд мне нужно получать новые снимки с 50 камер.
Я использовал timercontrol, и каждые 500 мс каждые 500 мс использую этот код до этой камеры.
номер и сохранить JPEG, но он работает один за другим, поэтому производительность снижается!
50 мс х 500 камер = 25000 мс (25 с), если я установлю интервал управления таймером 100 мс, программа остановится.
Когда я использую приведенный выше код, я получаю растровое изображение bmp за 200 мс, но когда оно пытается записать в формате jpeg на диск, это занимает много времени.
Что я могу сделать, чтобы записать на диск быстрее? Я искал карту памяти - это поможет? Я хочу хранить JPEG на диске, потому что я буду размещать эти фотографии на веб-сайте и делиться ими с людьми. Могу ли я использовать отображенную память и обслуживать ее публично через веб-сайт?
UPDATE:
Я также использовал класс WebClient для асинхронных работ,
http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=571
В результате получилось: получить изображение размером около 300 мс и записать его на диск около 700 мс
Поэтому я должен найти решение, чтобы записать на диск как можно больше.
Какой из них лучше? Записать картинки на диск или отправить картинки в базу?
Я пытался сохранить фотографии, чтобы они были готовы к подаче, потому что на сайте люди должны видеть обновленные фотографии. Какой из них лучше для тысяч клиентских запросов? Хранить их на диске или хранить в базе данных как двоичные файлы?