Кодирование видео в реальном времени для мобильных устройств - PullRequest
4 голосов
/ 02 декабря 2009

Кто-нибудь знает хороший способ перекодирования видео в реальном времени (целевые форматы: 3GP s263 AMR узкополосный и MP4 mp4v mp4a, но не в одно и то же время, конечно. Входные файлы будут WMV, но чем больше входных данных форматы поддерживаются лучше)?

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

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

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

Обновление

Просто чтобы вы, ребята, были в курсе того, к чему я клонил, я сейчас играю с идеей написать оболочку, которая обращается непосредственно к DLL-файлам FFmpeg, а не к exe-файлу, и начинает думать, что я могу быть я могу получить функциональность, которую я использую после этого (перехват данных постепенно, а не после того, как все будет сделано, может приблизить меня к достаточному уровню реального времени).

Все еще обсуждаем, будет ли это работать, и пытаемся найти хорошие примеры того, как это сделать (даже те, которые написаны на c, а не на c #, потому что это покажет, как взаимодействовать с DLL).

Ответы [ 2 ]

1 голос
/ 07 декабря 2009

Я играл с кодировкой в ​​реальном времени для презентаций и групповых встреч. Лучшим решением, которое я нашел, был Microsoft Expression Encoder. Включенный SDK довольно прост в использовании и должен обеспечивать большинство необходимых вам функций.

1 голос
/ 06 декабря 2009

Что касается потокового решения, мы использовали StreamCoders 'MediaSuite.net . Для нас это работало нормально для потоковой передачи любого видео на основе MPG в 3GP / H263. Однако вы должны точно знать, что вы делаете с точки зрения спецификаций, форматов, кодировок и т. Д. Это огромное поле, и их продукт не «объясняет» некоторые основные термины, они предполагают, что вы уже знаете, что делаете. Кроме того, насколько я помню, приходится вручную синхронизировать аудио и видео каналы. Их демонстрационное приложение показывает, как это сделать (но опять же, это просто демонстрационное приложение, так что вы можете закончить с оптимизацией).

Я думаю, что вы можете использовать его как для перекодирования, так и для потоковой передачи, я сам в последнее время не пробовал. Как вы планируете выводить результат? Как System.IO.MemoryStream?

Другое потоковое решение - иметь хорошо известный потоковый сервер, такой как Xenon , и использовать его, применяя метод «back-to-back»: ваш обработчик получает запрос и создает запрос к потоковой передаче. сервер. Ответ потокового сервера передается клиенту. Это что-то вроде взлома, но какое-то время у нас получалось здорово.

Ваше решение ffmpeg отлично, и вы можете найти его более простым для реализации, чем низкоуровневое преобразование почти в реальном времени. Если вы можете «терпеть» это, возможно, лучше оставить все как есть.

Обновление : Если в итоге вы оберните ffmpeg библиотекой .Net, что кажется отличным решением, поскольку ffmpeg - отличная библиотека, она было бы здорово, если бы вы могли поделиться своим решением. Мы пытались поиграть с ним, но у нас не хватило времени.

...