The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Передача потокового видео"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Передача потокового видео"  +/
Сообщение от ufobject email(ok) on 29-Авг-08, 11:44 
Доброго времени суток!
У меня есть след. задача:
Есть некая железяка, DaVinci на ARM камне. Она умеет считывать с камеры видео, паковать его в mpeg4 (H.264) и писать в файл на собственную флешку (исходники предоставлены). Моя задача - организовать потоковое multicast видео средствами TCP/IP, принимать на клиенте это видео и воспроизводить/записывать в файл его. Вся проблема в том, что ранее такими задачами я не занимался и достаточно мало просвещен как в кодеках, так и в multicast передаче. С мултикастом проблем нет (благо есть у меня хорошая книга), но вот с вопросом чтения/передачи/приема видео я как в лесу в трех соснах заблудился... Вопрос собственно заключается в следующем. Как я понимаю, разница между форматом файла и кодеком есть. Если я буду передавать видео, которое в любой момент может подхватить некий клиент, то как мне это лучше организовать? Каким протоколом пользоваться? Могу ли я просто на этапе кодирования видео (до записи и форматирования в файл) просто тупо гнать поток по сети и на клиенте средствами ffmpeg декодировать поток в читабельный формат? Может кто занимался подобной задачей? Подскажите, может есть статьи подробно освещающие эту тему с точки зрения программирования?
Заранее спасибо!
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Передача потокового видео"  +/
Сообщение от Fuzzy (ok) on 29-Авг-08, 12:01 
Рекомендую посмотреть на mpeg4ip
http://mpeg4ip.sourceforge.net/

Для клиента подойдёт vlc www.videolan.org,
но можно обойтись самим ffmpeg-ом (ffserver и ffplay).

Я вообще делал cgi прогу для www которая паковала видео с v4l и транслировала jpeg в сеть в реальном времени.
Пример http://jpegcameras.com/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Передача потокового видео"  +/
Сообщение от ufobject email(ok) on 29-Авг-08, 12:24 
>Рекомендую посмотреть на mpeg4ip
>http://mpeg4ip.sourceforge.net/
>
>Для клиента подойдёт vlc www.wideolan.org,
>но можно обойтись самим ffmpeg-ом (ffserver и ffplay).

Спасибо за ответ!
Смотрел я на mpeg4ip, пока на подробное ознакомление времени не было. Все там хорошо, по описанию, но дело в том, что орагнизацию сервера придется делать своими руками, так как частично это уже сделано на железке (считывание, кодирование) мне осталось только организовать перехват нужного буфера в нужном месте и пересылку буфера.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Передача потокового видео"  +/
Сообщение от Fuzzy (ok) on 29-Авг-08, 12:40 
>Все там хорошо, по описанию, но дело в том, что орагнизацию сервера
>придется делать своими руками, так как частично это уже сделано на
>железке (считывание, кодирование) мне осталось только организовать перехват нужного буфера в
>нужном месте и пересылку буфера.

Там есть API, можно самому делать.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Передача потокового видео"  +/
Сообщение от ufobject email(ok) on 29-Авг-08, 13:27 
>>Все там хорошо, по описанию, но дело в том, что орагнизацию сервера
>>придется делать своими руками, так как частично это уже сделано на
>>железке (считывание, кодирование) мне осталось только организовать перехват нужного буфера в
>>нужном месте и пересылку буфера.
>
>Там есть API, можно самому делать.

Да, но мне придется внедрять mpeg4ip на железку?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Передача потокового видео"  +/
Сообщение от Fuzzy (ok) on 29-Авг-08, 14:09 
>Да, но мне придется внедрять mpeg4ip на железку?

А что за железка, не PC/104?
Если там есть SDK для доступа к апаратному кодеру
можно самому зделать трансляцию видео в реальном времени из ffserver или используя API mpeg4ip.

Если есть linux драйвер v4l/v4l2 для mpeg4 то вообще ничего переделывать не надо,
использовать готовые решения.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Передача потокового видео"  +/
Сообщение от ufobject email(ok) on 29-Авг-08, 15:10 
>>Да, но мне придется внедрять mpeg4ip на железку?
>
>А что за железка, не PC/104?
>Если там есть SDK для доступа к апаратному кодеру
>можно самому зделать трансляцию видео в реальном времени из ffserver или используя
>API mpeg4ip.
>
>Если есть linux драйвер v4l/v4l2 для mpeg4 то вообще ничего переделывать не
>надо,
>использовать готовые решения.

Железка DaVinci называется. Процессор ARM9. Есть v4l. Можешь подробнее про готовые решения?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Передача потокового видео"  +/
Сообщение от Fuzzy (ok) on 29-Авг-08, 15:16 
>Можешь подробнее про готовые решения?
>

Я уже выше написал ffmpeg, mpeg4ip, vlc, xawtv, motion,  ...
Их много :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Передача потокового видео"  +/
Сообщение от ufobject email(ok) on 29-Авг-08, 15:28 
>>Можешь подробнее про готовые решения?
>>
>
>Я уже выше написал ffmpeg, mpeg4ip, vlc, xawtv, motion,  ...
>Их много :)

Ну да, ступил Ж). Спасибо!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "Передача потокового видео"  +/
Сообщение от Simon email(??) on 29-Авг-08, 16:08 
>Если есть linux драйвер v4l/v4l2 для mpeg4 то вообще ничего переделывать не
>надо, использовать готовые решения.

А есть такие?! Вынуть отдельный кадр не проблема, а вот куски уже кодированного потока выдирать - такого не видел. Уже есть такие камеры? Уж очень интересно


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "Передача потокового видео"  +/
Сообщение от Fuzzy (ok) on 29-Авг-08, 16:16 
>А есть такие?! Вынуть отдельный кадр не проблема, а вот куски уже
>кодированного потока выдирать - такого не видел. Уже есть такие камеры?
>Уж очень интересно

Я сам не видел, но говорят есть, например sensoray
http://sensoray.com/products/frame_grabber.htm

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "Передача потокового видео"  +/
Сообщение от Simon email(??) on 29-Авг-08, 17:10 
Спасибо за ссылку! Почитал, интересно. Там оказывается уже сервера готовые

Я не правильно вопрос занял. Я просто думал, что есть уже видеокамеры со встроенным mpeg4 кодером. Типа, чтобы картинку не в Bayer или JPEG формате брать с v4l устройства, а сразу куски mpeg4 потока. А управлять качеством через v4l_ioctl. =) Эх-х-х

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Передача потокового видео"  +/
Сообщение от ufobject email(ok) on 29-Авг-08, 12:31 
>Рекомендую посмотреть на mpeg4ip
>http://mpeg4ip.sourceforge.net/
>
>Для клиента подойдёт vlc www.videolan.org,
>но можно обойтись самим ffmpeg-ом (ffserver и ffplay).
>
>Я вообще делал cgi прогу для www которая паковала видео с v4l
>и транслировала jpeg в сеть в реальном времени.
>Пример http://jpegcameras.com/

К стати, вопрос. Я по началу запутался в понятиях формата файла и кодека. Теперь понял что это принципиально для потокового видео. Вопрос в следующем: когда я ищу кодек по названию, к примеру mpeg4 h.264, то я так понимаю это формат именно КОДЕКА, но не файла. А как в таком случае называется формат самого файла (так как там есть свой заголовок, начало и конец в отличии от потока)? Может я туплю, но не понимаю

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Передача потокового видео"  +/
Сообщение от Fuzzy (ok) on 29-Авг-08, 12:49 
>К стати, вопрос. Я по началу запутался в понятиях формата файла и
>кодека. Теперь понял что это принципиально для потокового видео. Вопрос в
>следующем: когда я ищу кодек по названию, к примеру mpeg4 h.264,
>то я так понимаю это формат именно КОДЕКА, но не файла.
>А как в таком случае называется формат самого файла (так как
>там есть свой заголовок, начало и конец в отличии от потока)?
>Может я туплю, но не понимаю

Файлы имеют свои заголовки, без разницы какое разширение у файла, хоть .doc.
Плееры разпознают формат по заголовкам.
h.264 "подмножество" mpeg4.

Заголовки там по всему потоку.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Передача потокового видео"  +/
Сообщение от ufobject email(ok) on 29-Авг-08, 13:30 
>[оверквотинг удален]
>>А как в таком случае называется формат самого файла (так как
>>там есть свой заголовок, начало и конец в отличии от потока)?
>>Может я туплю, но не понимаю
>
>Файлы имеют свои заголовки, без разницы какое разширение у файла, хоть .doc.
>
>Плееры разпознают формат по заголовкам.
>h.264 "подмножество" mpeg4.
>
>Заголовки там по всему потоку.

Вот спасибо! То что надо. получается, что кодируя видео в H.264 и передавая поток по сетке, клиент может начать декодирование и проигрывание с любого момента (заголовки видимо во всех пакетах идут)?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "Передача потокового видео"  +/
Сообщение от Simon email(??) on 29-Авг-08, 17:28 
>Вот спасибо! То что надо. получается, что кодируя видео в H.264 и
>передавая поток по сетке, клиент может начать декодирование и проигрывание с
>любого момента (заголовки видимо во всех пакетах идут)?

не-а. Так не получиться. Грубо говоря, поток с видиокодека это просто бесконечная череда байт. Но кодек, тебе может сообщить к какому моменту времени сейчас относиться текущая последовательность байт . Контайнер (формат файла) используя эту информацию бьет поток на куски, каждому потоку приписывает метку времени и каждый кусок независимо от другого кладет в файл.

Тебе нужно сделать примерно точно также. Поток получил, пакетировал и передаешь уже почти независимыми кусками. На клинете склеиваешь пакеты по порядку, получаешь поток на декодер.

Понятно, что пакетирование очень непростая операция. Например, ffmpeg берет эти все действия на себя. Он сам определяет как нужно бить поток, чтобы тот потом адекватно начал склеиваться начиная с какого-то момента времени.

Просто так поток H264 ты не передашь. Клиент не будет знать как в него вклиниться ... Вот,..

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Передача потокового видео"  +/
Сообщение от mikra on 29-Авг-08, 12:04 
про общие принципы вещания, если интересно
http://www.videolan.org/doc/streaming-howto/en/streaming-how...
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Передача потокового видео"  +/
Сообщение от ufobject email(ok) on 29-Авг-08, 12:25 
>про общие принципы вещания, если интересно
>http://www.videolan.org/doc/streaming-howto/en/streaming-how...

Спасибо!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Передача потокового видео"  +/
Сообщение от Simon email(??) on 29-Авг-08, 16:00 
разница менду форматом файла (контейнером) и кодеком есть. Кодек на выходе дает тупо поток, контейнер же размещает каждый поток в файле в виде отедельных фреймов (не кадров, а именно frame'ов, потому что в frame может быть как один кадр, так и последовательность от базового до базового например). Каждый фрейм имеет метку синхронизации, чтобы обеспечить привильную состыковку потоков при произведении, видео и аудиопотока например.

ffmpeg состоит из нескольких библиотек. avformat.h соответственно позволяет бегать по видеофайлу и перепрыгивать с одной метки премени на другую (av_seek_frame). avcodec.h соответственно позволяет декодировать каждый поток во frame и получить что-то на выходе (кадры, кусок аудио).

Так что по сути, подцепить поток с места не проблема. Ты просто получаешь очередной frame и декодируешь его ffmpeg'ом и показываешь.

Подстава с транспортом. Frame может передаваться разными путями. Например, по SIP протоколу (упаси боже связываться с ним =)), с помощью собственного транспорта (так делали мы через UDP). Можно задействовать транспорт из video-on-lan (vlc) и попытатьcя пихать данные на сервере так, чтобы vlc плеер их распознал и сам продекодировал (все равно он использует тот же ffmpeg для декодирования видео)..

Подстава в следующем: нужен  транспорта =) Т.к. давинчи это по сути конструктор, то можно искать или готовые компоненты, или писать их самим =) Соответственно, решите насчёт транспорта (по какому протоколу передавть, в каком виде, будете ли брать что-нибудь готовое или же писать сами). Mutlicast Multicast'ом, но начинка определяется именно вашими задачами. =)

Конечно, vlc как транспорт было бы использовать красиво. Но тогда нужно клепать железку-компонент под давинч, перед этим подробно разобраться с протоколом их передачи. Я ту в дебри не влезал =)

Статей на эту тему практически нет. ffmpeg ковыряется на примерах (и есть парочка неплохих tutorial'ов), с vlc как с транспортом мне разобраться хотелось бы для себя, но в нашей задаче мы обошлись без него. нам нужен был именно свой очень специфический транспорт.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "Передача потокового видео"  +/
Сообщение от Simon email(??) on 29-Авг-08, 16:04 
Да, и ещё пять копеек в сторону SIP'а. Протокол конечно полное г..но, но видео можно гнать через его компоненту: RTP. Я думаю есть готовые библиотеки для передачи по RTP, и играть уже стандартными средствами =)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "Передача потокового видео"  +/
Сообщение от ufobject email(??) on 30-Авг-08, 16:27 
>Да, и ещё пять копеек в сторону SIP'а. Протокол конечно полное г..но,
>но видео можно гнать через его компоненту: RTP. Я думаю есть
>готовые библиотеки для передачи по RTP, и играть уже стандартными средствами
>=)

Огромное спасибо за развернутый ответ! Я думал что все намного проще.. В понедельник на работу приду, буду думать. Еще раз спасибо!
P.S.
Ты говорил про howto, не мог бы дать ссылочку?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

21. "Передача потокового видео"  +/
Сообщение от Simon email(??) on 02-Сен-08, 12:57 
>>Да, и ещё пять копеек в сторону SIP'а. Протокол конечно полное г..но,
>>но видео можно гнать через его компоненту: RTP. Я думаю есть
>>готовые библиотеки для передачи по RTP, и играть уже стандартными средствами
>>=)
>
>Огромное спасибо за развернутый ответ! Я думал что все намного проще.. В
>понедельник на работу приду, буду думать. Еще раз спасибо!
>P.S.
>Ты говорил про howto, не мог бы дать ссылочку?

Первая ссылка в google по запросу ffmpeg tutorial =)
http://www.dranger.com/ffmpeg/tutorial01.html
Вот ещё.
http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html

RTP библиотеки ищутся так же =)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

22. "Передача потокового видео"  +/
Сообщение от Vladimir email(??) on 05-Авг-09, 13:24 
Та же задача стоит:) Интересно, насколько вы продвинулись в ней...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру