2016-05-17 2 views
1

Запуск в немного путаницы с net7mma library.Как записать поток RTSP на диск с помощью net7mma?

Я хочу установить постоянный поток RTSP на IP-камеру Axis, а затем в определенный момент записать поток RTSP на диск. Первое должно быть возможным, не уверен, что последнее можно сделать в этой библиотеке или просто скомпоновать изображения кадров.

В настоящее время пытается следующий код для получения потока:

 RtspClient client = new RtspClient("rtsp://axiscamera/axis-media/media.amp", RtspClient.ClientProtocolType.Http); 
     client.Credential = new System.Net.NetworkCredential("root", "password"); 
     client.AuthenticationScheme = System.Net.AuthenticationSchemes.Basic; 
     client.StartPlaying(); 
     client.Client.RtpPacketReceieved += OnPacketReceived; 

... но это врезается эффектно:

Исключение брошено: 'Media.Common.TaggedException`1' в СМИ. Rtsp.dll Программа «[17464] RtspTestViewer.vshost.exe» вышла с кодом -1073741819 (0xc0000005) «Нарушение прав доступа».

Не уверен, если я должен работать с RtspSource или RtspClient или обоих. Как это должно быть сделано?

+0

Я, казалось, потерял вас здесь или еще что-то, дайте мне знать, как я могу помочь! – Jay

ответ

0

Во-первых, Спасибо за ваш интерес к проекту.

Нарушение прав доступа, вероятно, потому, что есть что-то уже имеет исключительное право собственности на порт 554, иногда wmpnetwork.exe использует порт 554 для поддержки протокола DLNA, но это трудно сказать, без дополнительной информации, вы можете использовать netstat, чтобы определить, что с помощью этого порт уже.

Это, безусловно, возможно сохранить отдельные потоки, но библиотека не объединяет потоки (объединяющие) потоки в контейнер [хотя может читать почти все контейнеры].

Сессионное описание, которое извлекается через SETUP, расскажет вам, какие медиа-треки доступны и какой кодек они используют.

После этого вам необходимо депакетировать полученные данные (RtpPackets/RtpFrame), чтобы сделать что-либо значимое с ним, например. храните его на диске или воспроизводите его.

RtpPackets составлял RtpFrame; в большинстве сценариев они состоят из нескольких пакетов, в которых последний пакет имеет бит Marker. Обычно все пакеты, которые соответствуют RtpFrame, также имеют одинаковое поле Timestamp.

Основание RtpFrame реализация в моем проекте используется только для событий, должна быть производная реализация для вашего кодека в классе RtspServer.

Поэтому я бы использовал событие OnFrameChanged, оно срабатывает каждый раз, когда в рамку добавляется RtpPacket. Параметр «final» в событии RtpFrameChanged указывает, будет ли это последний раз, когда событие будет срабатывать с данным экземпляром кадра в качестве аргумента.

Для выполнения обработки обычно можно использовать следующий код, например, в событии OnRtpFrameChanged.

if(final) { /* process the frame further*/ } 

Производный RtpFrame реализации являются полезными для depacketize (перейти от RtpPackets к декодеру или иным образом) или пакетировать (переход от данных к RtpPackets).

Если вы проверяете UnitTests решение, которое вы увидите, как я использую полученные для реализации JPEG, H.264 и AAC (возможно, также несколько других)

Если у вас есть кодек, который вы найдете не поддерживается макияж вопрос о проекте Discussion Area, и мы можем пойти оттуда.

+0

Попытка следовать за вами здесь, я не думал, что мне придется создавать или вводить отдельный декодер; по существу у RtspSource есть событие, которое срабатывает с фреймом System.Drawing.Image - это здорово и доставит мне большую часть пути, но не ясно, как добраться до этой точки. – Brandon

+0

Как вы планируете что-либо делать с данными без декодера? Например, с JPEG существует реализация, которая уже существует, если вы используете видеокодек, а не образ, тогда вам нужен способ получить экземпляр System.Drawing.Image для формата ... – Jay

+0

Вы также можете использовать RtpTools чтобы написать файл RtpDump, который не требует каких-либо других библиотек, но я не уверен, насколько он вам будет полезен, поскольку вам все равно понадобится декодер для отображения данных или прослушивания аудио. – Jay

Смежные вопросы