Как лучше использовать ffmpeg с ASP.NET Core, в Linux?

2

У меня есть проект (ASP.NET Core, в Linux), где находятся несколько задач, связанных с преобразованием и извлечением кадров из видеофайла.

Я подумал о двух возможных вариантах:

  1. с помощью утилиты консоли ffmpeg
  2. используя P/Invoke с библиотекой libavcodec и другими, которые ffmpeg использует

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

Я сделал googling, но нет неплохих проектов для платформы С#/ASP.NET Core на платформе Linux. Есть несколько полезных для C++ и Python, но НЕ для С# в Linux/.NET Core.

Я решил посмотреть на первый вариант, который, я полагаю, был бы более простым и практичным. Но есть некоторые слабые места, которые могут вызвать множество проблем. Мы понимаем (я полагаю), что с использованием 1-го варианта конечный разработчик должен использовать процесс forking. Таким образом, возможны проблемы с процессом бездействия и другими возможными проблемами...

Я спрашиваю о вашей практике, потому что это мой первый опыт на платформе Linux с преобразованием/выборкой видео с использованием С#. Я использовал библиотеку Expression Encoder.NET на платформе Windows, но это другая история, и это не имеет смысла, прямо сейчас.

Может быть, есть и другие варианты, которые я сейчас не вижу. Мне не нравится первый вариант из-за возможных необработанных исключений, потому что ffmpeg с такой ролью становится черным ящиком для бэкэнда ASP.NET Core.

  • 1
    Я лично использую 1-й вариант. Конечно, вам нужно перенаправить stdout strerr, чтобы перехватить вывод ffmpeg для перехвата ошибок (и проверки кода завершения процесса). Вам необходимо заявить, какие «многие возможные проблемы» вы видите в этом случае. Тем не менее, я не буду выполнять это непосредственно из приложения asp.net, у меня будет отдельное приложение для обработки видео.
  • 0
    @Evk Evk Понятно, это вариант, спасибо. О возможных проблемах ... Я понимаю, что говорить об абстрактных вариантах довольно глупо, потому что говорить такие вещи нормально только из реальной практики. Но, например, видео или аудио были закодированы с ошибками, и ffmpeg может привести к сбою ... Такая ситуация может нарушить длительный процесс загрузки видео с генерацией предварительного просмотра ... Но это также может быть обработано с помощью stdin / stdout. Я не думал об этом, спасибо. Таким образом, я могу обрабатывать все возможные исключения.
Показать ещё 4 комментария
Теги:
ffmpeg
asp.net-core
libavcodec

1 ответ

1

У меня была та же проблема, и я создал собственную минимальную оболочку FFMPEG на основе FFmpeg.AutoGen. Wrapper хорошо работает на linux, но этот путь требует больше времени, чтобы FFMPEG как FFMPEG libs

Некоторое время назад для тестирования я создал также первый вариант с помощью new Process(). Великая вещь таким образом - простота

        Process process = new Process();
        process.StartInfo.FileName = "ffmpeg.exe";
        process.StartInfo.Arguments = "example arguments";
        process.Start();

Вы должны решить сами, но помните - вызывать функции C на С# - это удивительная вещь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню