В данный момент репозиторий находится тут: http://github.com/maxlapshin/erlyvideo
Из того, что я дописал -- он теперь всё таки умеет рассылать сообщения
по флеш-клиентам (вариации на тему push-канала)
и я начал учить его чтению mp4 файлов. Сейчас они не играются,
предположительно из-за неправильного хендшейка.
Если кому интересно -- смотрите.
Не хочу огорчать, но протокол открыли лишь частично. Это больше
напоминает умышленную дезинформацию,
чем публикация протокола. Ruby izumi не просто так генерирует
специфичный handshake,
именно в нём кроется включение h264 стриминга.
Да, Михаил, у вас видео то показывалось? rtmpy это ваш?
05.09.09, 13:12, "Max Lapshin" <max.l...@gmail.com>:
> 2009/9/5 Garanin Michael :
> > кстати: протокол RTMP уже открыли. спецификация на сайте адоба.
> > я делал rmtp-стриминг правда на питоне, и в этом плане для понимания как
> > парсить mp4-файлы rubyizumi более понятен.
> Да, Михаил, у вас видео то показывалось? rtmpy это ваш?
>
--
Яндекс.Почта. Поищите спам где-нибудь еще http://mail.yandex.ru/nospam/sign
О, спасибо большое.
При считывании mp4 файла я полностью загружаю в память его moov атом,
т.е. заголовок.
В нём
что бы сделать seek, надо выявить по заявленной секунде ближайший
ключевой кадр перед ней.
Если бы я писал на C, то самой подходящей структурой для такого
поиска, пожалуй, было бы какое-нибудь B-tree,
если бы мне надо было достать из БД, я бы выполнил:
SELECT * FROM frames WHERE pts < ? AND is_keyframe = 't' AND type =
'Video' ORDER BY pts DESC LIMIT 1; // pts — время кадра
В каком виде хранить список фреймов на эрланге, что бы можно было
быстро сделать такой seek?
Выглядит, будто ets подходит.
Если речь идет об обработке потоковых бинарных данных, то наверно
оптимальнее будет воспользоваться обычным binary pattern matching'ом
(вроде у Армстронга в Concurrent programming in Erlang был пример с
разбором видео формата).
2009/9/16 Max Lapshin <max.l...@gmail.com>:
> Если речь идет об обработке потоковых бинарных данных, то наверно
> оптимальнее будет воспользоваться обычным binary pattern matching'ом
> (вроде у Армстронга в Concurrent programming in Erlang был пример с
> разбором видео формата).
Сам разбор mp4 формата у меня так и происходит. Атом вычитывается (эх,
не позволяет компилятор эрланга матчить такое:
AtomLength:32/big, Atom:(AtomLength - 4)/binary ), все данные
разбираются, обрабатываются и в памяти строятся.
Хочется понять, как потом по этому искать. Насчет gb_trees понял, спасибо.
Ну мы вроде не обязаны матчить всё и только в вызове ф-ции.
Поэтому можно переписать.
parse_stream(<<AtomLength:32, Rest/binary>> = Stream, Acc) ->
AtomSize = AtomLength - 4,
<<Atom:AtomSize/binary, RestCrap>> = Rest,
%% Here we should decide what to do with found Atom
...
%% proceed further
parse_stream(RestCrap, [Atom | Acc]).
2009/9/16 Max Lapshin <max.l...@gmail.com>:
Конечно не обязаны, но так чертовски удобно =)
Аудио файлы отдавать не пробовал, но доработки нужны очень небольшие.
Аудио стримы попробовать можно, но какой источник аудио потока?
On 20 окт, 15:50, Max Lapshin <max.laps...@gmail.com> wrote:
> 2009/10/20 faust45 <faust...@gmail.com>:
Не, это то, что будет с RTMP сервера звук принимать. А откуда ты
хочешь в RTMP сервер звук засовывать?
Из файлов или откуда-нибудь ещё?
On 20 окт, 15:58, Max Lapshin <max.laps...@gmail.com> wrote:
> 2009/10/20 faust45 <faust...@gmail.com>:
>
Охотно верю. Кстати, какими средствами пользовались? Что-то открытое?
Не, я имел ввиду для обработки этого пользовались потом ручными
платными программами или какими-то библиотеками?