Не подскажите как 2 поток подключить в Линии?Запустите Internet Explorer и попробуйте подключится к IP-камере. Если доступ к IP-камере получить не удалось, то проверьте настройки вашего брэндмауэра и повторите попытку. Захват видео с сетевых камер, часть 2 / Хабрахабр. В первой своей статье «измерение расстояния до объекта и его скорости» я рассмотрел захват изображений с веб- камер через Video. Linux. 2 и через Direct.
X. В следующей статье «захват видео с сетевых камер, часть 1» я рассмотрел как работать с сетевыми Motion- JPEG камерами. Сейчас я поведаю Вам о захвате изображений с сетевых RTSP камер, в частности поток Motion- JPEG по RTSP. Задача эта более сложная нежели Motion- JPEG по HTTP, так как необходимо больше действий, больше подключений, но взамен мы получаем большую гибкость, скорость, функциональность и даже некую универсальность. Честно говоря, RTSP для простых задач избыточен, но я не сомневаюсь, что найдутся ситуации, где он будет необходим. Что такое RTSPRTSP расшифровывается как Real Time Streaming Protocol — потоковый протокол реального времени — по сути это протокол управления вещанием, он позволяет выполнять несколько команд, такие как «старт», «стоп», «переход на определённое время». Протокол этот подобен HTTP в реализации, тоже есть заголовки, тоже всё передаётся в текстовом виде. Вот основные его команды из спецификации: OPTIONS — возвращает список поддерживаемых методов (OPTIONS, DESCRIBE и т. DESCRIBE — запрос описания контента, описывает каждый трек в формате SDP; SETUP — запрос установки соединений и транспорта для потоков; PLAY — старт вещания; TEARDOWN — остановка вещания. И особенность RTSP в том, что он сам по себе не передаёт нужные нам видео данные! Целый протокол только для установления связи. Здесь просматривается аналогия с MVC, идёт разделение между данными и их описанием. Рабочей лошадкой является другой протокол: RTP — Real- time Transport Protocol — транспортный протокол реального времени. С его помощью и передаются нужные нам данные. Стоит отметить, что с этим протоколом очень даже приятно работать, дело в том, что он облегчает клиентскому ПО восстановление данных после их фрагментации на канальном уровне. А также несёт в себе ещё несколько полезных полей: формат передаваемых данных, временную метку и поле синхронизации (если передаётся, например, одновременно аудио и видео). Хотя этот протокол может работать по TCP, его обычно используют с UDP из- за его ориентированности на скорость. То есть RTP данные это UDP датаграмма с заголовком и полезными данными медиа- контента (payload). Казалось бы нам больше ничего и не нужно. Подключаемся по RTSP, забираем по RTP. Но не тут- то было, умные дяди придумали третий протокол: RTCP — Real- time Transport Control Protocol — протокол контроля за транспортом в реальном времени. Этот протокол служит для определения качества сервиса, с его помощью клиент и сервер знают как хорошо или плохо идёт передача контента. В соответствии с этими данными сервер, например, может понизить битрейт или вообще перейти на другой кодек. Принято, что RTP использует чётный номер порта, а RTCP следующий нечётный. Пример общения по RTSP. У меня только один источник RTSP потока — камера e. Vidence APIX Box M1, поэтому все примеры относятся к ней. Ниже лог общения между плеером VLC (он правда мне очень помогает в моих исследованиях) и этой камерой. Первый запрос от VLC на порт 5. Ответ через пустую строку и начинается с «RTSP/1. OPTIONS rtsp: //1. RTSP/1. 0. 0. 3: User- Agent: VLC media player (LIVE5. Streaming Media v. RTSP/1. 0 2. 00 OK. Date: Fri, Apr 2. GMT. 0. 8: Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE. DESCRIBE rtsp: //1. RTSP/1. 0. 1. 2: Accept: application/sdp. User- Agent: VLC media player (LIVE5. Streaming Media v. RTSP/1. 0 2. 00 OK. Date: Fri, Apr 2. GMT. 1. 8: Content- Base: rtsp: //1. Content- Type: application/sdp. Content- Length: 4. Accept- Dynamic- Rate: 1. IN IP4 0. 0. 0. 0. Session streamed by ? А можешь ты меня просить сделать любое из OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY и PAUSE. Здесь 1. 92. 1. 68. IP адрес моей камеры. CSeq отражает порядковый номер запроса, ответ от сервера должен содержать тот же самый CSeq. А ответ от сервера начинается с . И прямым текстом следует перечисление всех доступных методов. Далее мы собираем информацию о том, что нас ждёт по запросу /jpeg, ведь мы именно за ним и пришли по ссылке . Также указываем, что хотим получить ответ в виде SDP (строка 1. В ответ нам приходит RTSP заголовок с указанием Content- Type и Content- Length, а после заголовка через пустую строку непосредственно сам контент в формате SDP: v=0. IN IP4 0. 0. 0. 0. Session streamed by . Нужны нам следующие строки: # Для видео. RTP/AVP 2. 6 # Транспорт потока RTP/AVP, порт любой, видео формат 2. Motion- JPEG. a=control: track. Название трека. a=cliprect: 0,0,7. Отсюда вытаскиваем разрешение. И частота кадров если нам понадобится. RTP/AVP 0 # Порт 7. PCM. a=control: track. Название трека. Если мы хотим получать только видео, то из аудио данных мы игнорируем всё, кроме названия трека. Он нам нужен, чтобы настроить поток, но нас никто не заставляет этот поток принимать, однако камера отказывается работать, если игнорировать аудио полностью (если делать SETUP только для видео трека). Честно говоря, я не знаю как будут реагировать разные камеры, если пренебрегать номером порта для аудио потока (7. SETUP. Далее идут два запроса SETUP, c указанием портов, на которые мы бы хотели принимать видео и аудио потоки. Первое число — порт для RTP, второе — для RTCP. В ответе камеры содержится информация о портах, с ними можно сверяться, чтобы удостовериться, что всё настроено правильно. Ещё нам необходимо запомнить идентификатор Session. Мы должны будем указывать его во всех последующих вызовах. После команды PLAY начнётся передача видео на порт 4. И по команде TEARDOWN вещание прекращается, соединение разрывается. MJPEG over RTP. К нам приходят RTP пакеты, нам их нужно расшифровать. Для этого я приведу здесь таблицу такого пакета с описанием всех полей.+ Bit offset. VPXCCMPTSequence Number. Timestamp. 64. SSRC Identifier. Сейчас номер версии 2. P (Padding, Дополнение): (1) используется в случаях, когда RTP- пакет дополняется пустыми байтами в конце, например для алгоритмов шифрования. X (Extension, Расширение): (1) указывает на наличие расширенного заголовка, определяется приложением. В нашем случае это не используется. CC (CSRC Count): (4) содержит количество CSRC- идентификаторов. Нами тоже не используется. M (Marker): (1) используется на уровне приложения, в нашем случае этот бит выставляется в единицу, если RTP пакет содержит окончание JPEG кадра. PT (Payload Type): (7) указывает формат полезной нагрузки — передаваемых данных. Для MJPEG это 2. 6. Sequence Number: (1. RTP пакета, используется для обнаружения потерянных пакетов. Timestamp (3. 2): временная метка, в нашем случае 9. SSRC (Synchronization Source): (3. Определяет источник потока. CSRC (Contributing Source): (3. Extension Header ID: (1. В нашем случае не используется. Extension Header Length: (1. Extension Header (Заголовок Расширения): сам заголовок. Содержимое может быть самым разным, зависит от контекста. Payload (Нагрузка): полезные данные — те самые наши JPEG кадры. Фрагментированные, конечно. Поля начиная с CSRC необязательные. Для передачи MJPEG с камер они не используются, на сколько я знаю. Переносимся на один уровень инкапсуляции выше. Теперь стоит задача преобразовать получаемые видео данные в полноценное JPEG изображение. В случае MJPEG по HTTP всё просто — вырезаем кусок потока и работаем с ним сразу как с JPEG изображением. В случае же RTP изображение передаётся не полностью, JPEG заголовок опускается для экономии трафика. Его необходимо восстановить самостоятельно из прилагаемых данных. Спецификация RTP Payload for MJPEG описана в RFC2. Я также приведу Вам таблицу с описанием всех полей формата: + Bit offset. Type- specific. Fragment Offset. Type. QWidth. Heightif Type in 6. Restart Marker headerif Q in 1. MBZPrecision. Length. Quantization Table Data. Type- specific (Зависит от типа): (8) смысл поля зависит от реализации, в нашем случае не применяется. Fragment Offset (Смещение фрагмента): (2. Type (Тип): (8) от типа зависит как восстанавливается изображение. Q (Quality): (8) качество изображения. Width: (8) ширина кадра. Height: (8) и высота. Restart Marker header (Заголовок маркеров RST): (3. JPEG, если применяются RST маркеры. Не знаю используют их камеры или нет, но я этот заголовок игнорирую. Это поле появляется только при Type от 6. Quantization Table Data (Таблицы квантинизации): если они присутствуют, то не нужно их отдельно вычислять. А нужны они для правильного воссоздания картинки из JPEG данных. Если эти таблицы не правильные, то изображение будет с неправильными цветами и контрастами. Таблиц должно быть две: Luma и Chroma для яркости и цветности соответственно. MBZ, Precision, Length: (3. Length задаю равным 1. В ином случае я не знаю как с ними работать. Заголовок маркеров RST и таблицы квантинизации могут и не присутствовать. Если нет первого, то очень хорошо, так как на другое я и не рассчитываю. Если нет второго — нужные таблицы вычисляются исходя из параметра Q. RTCP пакет содержит в себе некоторое подмножество, он бывает четырёх типов: 2. Мы должны принимать в первую очередь 2. В одном UDP пакете может быть несколько RTCP пакетов. Все типы имеют похожую структуру. Начинается любой RTCP пакет со следующих данных: + Bit offset. Version. Padding. SC or RC or Subtype. Packet Type. Length. Version: (2) версия RTP. Padding: (1) то же самое, что и для RTP. SC or RC or Subtype: (5) в зависимости от типа может быть количеством источников (Sources Count) или количеством получателей (Receivers Count) включенных в отчёт получателя и источника соответсвенно. Если это APP пакет, то это поле определяет подтип такого пакета. Packet Type: (8) тип пакета, 2. Sender's Report SS), 2. Receiver's Report RR), 2. Source Description SDES) и 2. APP). Length: (1. Далее я не буду приводить поля для каждого подтипа, их можно посмотреть в RFC3. Скажу лишь что SS и RR типы несут в себе информацию об отправленных/полученных пакетах и о временных задержках. SDES в себе несёт разные текстовые поля, определяющие источник, такие как его имя, email, телефон, местонахождение и т. На этом введение заканчивается. Python MJPEG over RTSP client.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
November 2016
Categories |