В этом примере показано, как использовать HTTP- MultipartConsumer
для потоковой передачи видео с веб-сайта. Он настраивает ImageConsumer
класс - CameraPlayer
- отображение изображений JPEG с гипотетического веб-сайта, полученного с IP-адреса.
Чтобы создать рабочий пример, вам нужно:
URL на основе IP-адресов аналогичен:
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 как часть никогда не заканчивающегося многопоточного сообщения. Каждая деталь имеет тип "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
Следующий код предоставляет среду для извлечения изображений. Чтобы запустить код, вы должны предоставить значения для содержимого в <>
персонажи. URL-адрес вашего веб-сервиса может включать дополнительные параметры, такие как сведения о входе и другие данные, указанные как имя, аргументы пары значений. Как использовать CameraPlayer
, добавьте его к своему вызову к send
. Дополнительные сведения о создании сообщений запроса см. в разделе HTTP Interface.
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);