В этом примере показано, как использовать MultipartConsumer
HTTP к потоковому видео от веб-сайта. Это настраивает
ImageConsumer
класс-CameraPlayer
- отобразить изображения JPEG от гипотетического веб-сайта, выведенного из IP-адреса.
Чтобы создать рабочий пример, вам нужно:
Основанный на IP-адресе URL, похожий на:
url = 'http://999.99.99.99/video/mjpg.cgi';
Учетные данные, похожие на:
creds = matlab.net.http.Credentials('Scheme','Basic','User','admin','Pass','admin'); creds.Username = 'yourName'; creds.Password = 'yourPassword';
CameraPlayer
КлассКамера IP отправляет изображения JPEG как части бесконечного многослойного сообщения. Каждая часть имеет тип of"image/jpeg"
. Чтобы обработать это сообщение, создайте MultipartConsumer
указание, что любая часть, типом которой является "image/*"
должен быть обработан CameraPlayer
. MATLAB® вызывает CameraPlayer.putData
метод для каждой системы координат изображения получил, который вызывает его суперкласс, чтобы преобразовать данные. CameraPlayer
в свою очередь использование imshow
создать окно рисунка, чтобы отобразить изображение и отображения последующие изображения в том же окне. Когда пользователь закрывает окно, putData
возвращает stop=true
, который заставляет MATLAB закрывать связь.
classdef CameraPlayer < matlab.net.http.io.ImageConsumer % CameraPlayer Player for IP camera % A ContentConsumer that displays image content types in a figure window. If % specified directly in the RequestMessage.send() operation, it assumes the % entire contents of the ResponseMessage is a single image. If the response % is a multipart message, and this is specified as a handler for image % types to a GenericConsumer or MultipartConsumer, then this assumes each % part is a frame of a video stream and displays them as they are received. % % CameraPlayer properties: % CameraPlayer - constructor % Image - the currently displayed Image object % % The following displays a received image, or a sequence of images received % in a multipart message and saves the last image received in the response % message Data. The last image displayed remains visible until cp is % deleted. % % req = RequestMessage; % cp = CameraPlayer; % resp = req.send(url, [], GenericConsumer('image/*', cp)); % image = cp.Image; % ...operate on image data... % Copyright 2017 The MathWorks, Inc. properties % Image - the currently displayed Image object % This image is in an Axes in a Figure. It is deleted when this object is % deleted. Image % Enough - control number of times to display message Enough end methods function obj = CameraPlayer() obj = obj@matlab.net.http.io.ImageConsumer(); end function [len, stop] = putData(obj, data) % putData - called by MATLAB or parent Consumer to process image data % Pass the data to ImageConsumer, which buffers it until the end of data % and then converts it to a MATLAB image depending on the type of image. [len, stop] = obj.putData@matlab.net.http.io.ImageConsumer(data); if isempty(data) % end of image; display the result in Response.Body.Data imdata = obj.Response.Body.Data; if iscell(imdata) if ~isempty(imdata{2}) % If it was an indexed image if we get a cell array, so convert imdata = ind2rgb(imdata{1},imdata{2}); else imdata = imdata{1}; end end if isempty(obj.Image) % First time we are called, create a figure containing the image obj.Image = imshow(imdata); obj.Enough = 0; else % Subsequent times we are called, just change CData in an already-displayed % image. obj.Enough = obj.Enough+1; if obj.Enough > 100 disp 'To stop, close figure window.' obj.Enough = 0; end try obj.Image.CData = imdata; catch e % Fails if window closed or data was bad if strcmp(e.identifier, 'MATLAB:class:InvalidHandle') % User must have closed the window; terminate silently stop = true; disp 'Figure window closed.' return end end end drawnow end end function delete(obj) delete(obj.Image); end end end
CameraPlayer
Следующий код служит основой для получения изображений. Чтобы запустить код, необходимо ввести значения для содержимого в <>
'characters'. URL для вашего веб-сервиса может включать дополнительные параметры, такие как информация о входе в систему и другая информация, указанная как имя, аргументы пары значения. Использовать CameraPlayer
, добавьте его в свой вызов send
. Для получения информации о создании сообщений запроса смотрите Интерфейс HTTP.
url = '<YOUR_URL_CONTAINING_IP_ADDRESS>'; cp = CameraPlayer; consumer = matlab.net.http.io.MultipartConsumer('image/*',cp); creds = matlab.net.http.Credentials('Scheme','Basic','User','admin','Pass','admin'); creds.Username = '<YOURNAME>'; creds.Password = '<YOURPASSWORD>'; opts = matlab.net.http.HTTPOptions('Cred',creds,'SavePayload',true); r = matlab.net.http.RequestMessage(); resp = r.send(url, opts, consumer);