Войти

Показать полную графическую версию : RTSP-C-LINUX


evpu
17-09-2015, 20:05
Всем добрый день!

Хочу научиться создавать примерно следующее:

Есть IP камера. Стоит главная задача написать приложение, которое цепляется к этой камере одним RTSP потоком, само при этом являясь сервером RTSP. Основная цель - организация соединения к видеопотоку большого числа клиентов, сохранив на камеру один поток.

Подскажите, в каком направлении думать, где искать С-библиотеки на эту тему. Самоцель - непременно разобраться самому, готовые решения не интересуют.

evpu
08-11-2015, 12:53
В продолжении этой темы. Что такое RTSP и с чем его можно съесть описано в описании протокола. Вся соль - парсинг текстовых заголовков RTSP.

Вопрос о теории. Допустим, некий байтовый массив занимает в памяти некий объем). Процесс его создавший, публикует его адрес и размер, и постоянно его обновляет. Т.е цепляется к потоку от камеры, и пишет передаваемый траффик в этот массив.
Тонкости пойму в процессе...

Суть вопроса такова: Если некий другой процесс (точнее много процессов) получат этот опубликованный адрес, и будут ОДНОВРЕМЕННО пытаться с ним работать, это не приведет к краху доступа к RAM? И в итоге крах приложения...
Т.е один процесс все время пишет(в первом приближении), а куча других пытаются читать.


Будет ли жить такое решение?
Речь идет о С, среда - Linux.

User001
08-11-2015, 18:09
Суть вопроса такова: Если некий другой процесс (точнее много процессов) получат этот опубликованный адрес, и будут ОДНОВРЕМЕННО пытаться с ним работать, это не приведет к краху доступа к RAM? »А у вас получится получить доступ к памяти, используемой другим процессом?
Вопрос о теории. Допустим, некий байтовый массив занимает в памяти некий объем). Процесс его создавший, публикует его адрес и размер, и постоянно его обновляет. Т.е цепляется к потоку от камеры, и пишет передаваемый траффик в этот массив.
Тонкости пойму в процессе... »Смотрите в сторону IPC (http://habrahabr.ru/post/122108/) (разделенная память и методы работы с общими ресурсами в принципе).
Речь идет о С »Почему именно этот язык?

evpu
08-11-2015, 19:13
ОК, спасибо!

В С есть мало-мальски наработки, работающий проект, пишу на нем относительно свободно... Хотя работы еще непочатый край, знания весьма начальны.
А задачи вполне реальные. Да и наблюдать за производительностью решений на нем довольно приятно!

По поводу доступа к памяти! Если я опубликую через раскрытие указателя диапазон адресов памяти используемый потоком, неужто по данному адресу другой процесс не сможет ничего прочитать? Поправьте если я неправ, но ведь снимаются же дампы RAM тех же исполняемых файлов, и то, что они заняты - не мешает их читать! Есть в частности под виндой WinHEX, с помощью которого можно залезть прямо в память.

User001
11-11-2015, 09:16
ОК, спасибо! »Пожалуйста.
В С есть мало-мальски наработки, работающий проект, пишу на нем относительно свободно... »Если это вам дается достаточно легко - то классно.
По поводу доступа к памяти! Если я опубликую через раскрытие указателя диапазон адресов памяти используемый потоком, неужто по данному адресу другой процесс не сможет ничего прочитать? Поправьте если я неправ, но ведь снимаются же дампы RAM тех же исполняемых файлов, и то, что они заняты - не мешает их читать! »Процессы не работают с физической памятью, они работают с виртуальной (1 (http://habrahabr.ru/company/yandex/blog/250753/), 2 (http://dmilvdv.narod.ru/Translate/LDD3/ldd_memory_management_linux.html)) так что публикуемый вами адрес - адрес в виртуальной памяти. Задача ОС изолировать адресное пространство процессов, так что если вы будете просто писать в память другого процесса, то как раз можете получить падение процесса, непонятные данные и т.д.

В любом случае вам нужно синхронизировать чтение и запись в буфер, а для этого как раз нужно межпроцессное взаимодействие. У вас, как я понял, 1 и 1 задача производителя-потребителя.




© OSzone.net 2001-2012