Показать полную графическую версию : RTSP-C-LINUX
Всем добрый день!
Хочу научиться создавать примерно следующее:
Есть IP камера. Стоит главная задача написать приложение, которое цепляется к этой камере одним RTSP потоком, само при этом являясь сервером RTSP. Основная цель - организация соединения к видеопотоку большого числа клиентов, сохранив на камеру один поток.
Подскажите, в каком направлении думать, где искать С-библиотеки на эту тему. Самоцель - непременно разобраться самому, готовые решения не интересуют.
В продолжении этой темы. Что такое RTSP и с чем его можно съесть описано в описании протокола. Вся соль - парсинг текстовых заголовков RTSP.
Вопрос о теории. Допустим, некий байтовый массив занимает в памяти некий объем). Процесс его создавший, публикует его адрес и размер, и постоянно его обновляет. Т.е цепляется к потоку от камеры, и пишет передаваемый траффик в этот массив.
Тонкости пойму в процессе...
Суть вопроса такова: Если некий другой процесс (точнее много процессов) получат этот опубликованный адрес, и будут ОДНОВРЕМЕННО пытаться с ним работать, это не приведет к краху доступа к RAM? И в итоге крах приложения...
Т.е один процесс все время пишет(в первом приближении), а куча других пытаются читать.
Будет ли жить такое решение?
Речь идет о С, среда - Linux.
Суть вопроса такова: Если некий другой процесс (точнее много процессов) получат этот опубликованный адрес, и будут ОДНОВРЕМЕННО пытаться с ним работать, это не приведет к краху доступа к RAM? »А у вас получится получить доступ к памяти, используемой другим процессом?
Вопрос о теории. Допустим, некий байтовый массив занимает в памяти некий объем). Процесс его создавший, публикует его адрес и размер, и постоянно его обновляет. Т.е цепляется к потоку от камеры, и пишет передаваемый траффик в этот массив.
Тонкости пойму в процессе... »Смотрите в сторону IPC (http://habrahabr.ru/post/122108/) (разделенная память и методы работы с общими ресурсами в принципе).
Речь идет о С »Почему именно этот язык?
ОК, спасибо!
В С есть мало-мальски наработки, работающий проект, пишу на нем относительно свободно... Хотя работы еще непочатый край, знания весьма начальны.
А задачи вполне реальные. Да и наблюдать за производительностью решений на нем довольно приятно!
По поводу доступа к памяти! Если я опубликую через раскрытие указателя диапазон адресов памяти используемый потоком, неужто по данному адресу другой процесс не сможет ничего прочитать? Поправьте если я неправ, но ведь снимаются же дампы RAM тех же исполняемых файлов, и то, что они заняты - не мешает их читать! Есть в частности под виндой WinHEX, с помощью которого можно залезть прямо в память.
ОК, спасибо! »Пожалуйста.
В С есть мало-мальски наработки, работающий проект, пишу на нем относительно свободно... »Если это вам дается достаточно легко - то классно.
По поводу доступа к памяти! Если я опубликую через раскрытие указателя диапазон адресов памяти используемый потоком, неужто по данному адресу другой процесс не сможет ничего прочитать? Поправьте если я неправ, но ведь снимаются же дампы 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.