Обновить

Комментарии 14

круто!

вопрос только с тестами - насколько качественно проверяли свою реализацию? начиная от гигантских файлов на декодирование и заканчивая всякой дичью

FFmpeg тем хорош что он вылизан максимально. С другой стороны если вам под видеонаблюдение или что то подобное где известные фиксированного "качества" файлы то тогда вообще никаких проблем - прошло тестовые прогоны значит будет работать в бою.

А это и есть FFmpeg. Автор собрал несколько билдов, накрутил сверху обёртку (как я понял, го не знаю).

да нет, он же пишет что вместо существующей либы где FFmpeg прилинкован он сделал полностью на Го.

сам код еше не смотрел так как с телефона читал, завтра уже с компа посмотрю, интересно что там

Я как раз код посмотрел. Репа - форк FFmpeg, изменений немного, глазами по диагонали посмотрел.

по идее если форк с линкованой то там нужно будет только заменить линкованные методы на написанные на Го

другое дело зачем, разве что сохранить обратную совместимость с решениями что уже давно юзают эту либу - например у него готовый продукт и он его "обновлил" не переписывая по факту ничего, а просто перевязав зависимость

Там не совсем ффмпег. Исключительно декодеры (6 МБ против 40+МБ у всех функций). Так же собран AV1 декодер тк он в другой репе, там в основном ассемблер.

Го библиотека не требует внешних зависимостей тк часть ffmpeg «зашита» и статически слинкована(с использованием cgo), но внешний АПИ чисто гошный. Тесты 80+%, все указанные форматы были проверены.

аа, ну такое

cgo бывает разным - потому и линкуют по внешне инсталируемой, что бы проблемы совместимости и тд решались за пределами кода

как минимум могут быть проблемы на старые сборки с вашим подходом, ведь вы как я понимаю вшили "самое актуальное"

но вообще было бы интересно посмотреть именно на полноценный порт FFmpeg на Го. У Го хватает фишек оптимизации благодаря которым чистая реализация будет немного медленнее но возможно более управляемее или иные особенности (как минимум контроль памяти более строгий можно сделать из того что вижу сходу)

Если для вас не критичен single-binary, то вот порт использующий зависимость: https://github.com/u2takey/ffmpeg-go

На сколько знают, там (в ffmpeg) в полной версии массово используется тонкое управлению памятью, всякие грязные хаки по взаимодействию с внешними библиотеками ускорителей, адский шаманизм с векторизацией и тому подобные вещи, которые на Go сделать очень больно или даже невозможно.

а поддержка плейлистов m3u и m3u8 есть? играть TS будет?

Надо добавить флаг при сборке: --enable-demuxer=hls,m3u8, тогда будет работать. Скрипт лежит в cmd/build/main.go. Завтра вечером добавлю в master.

Добавил mpegts демуксер. Теперь можно разбить плейлист на куски и скормить либе:

resp, err := http.Get(segmentURL)
if err != nil {
    panic(err)
}
defer resp.Body.Close()

dec, err := gopeg.NewDecoder(resp.Body)
if err != nil {
    panic(err)
}

for !dec.HasEnded() {
    frame, err := dec.DecodeFrame()
    if err != nil {
        panic(err)
    }

    // process frame
}

Если дадите url помогу протестировать.

... медиа-библиотек для Go ...

... на чистом коде Go ...

... и любого Go ...

Пардонь-те, и с какого ... перепугу вы указали хаб для языка Си?

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации