2009-12-02 7 views
4

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

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

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

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

Update

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

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

+0

http://www.intuitive.sk/fflib/ может помочь. – Stobor

+0

http://www.informikon.com/various/ – Stobor

+0

На странице informikon все ссылки на код 404 (похоже, существует много мертвых проектов ffmpeg-> C#. Предполагается, что многие люди пытаются и в конечном итоге откусывать больше чем они могут пережевывать: P). fflib - это тот, с которым я столкнулся, но он не дает мне какой-либо расширенной функциональности, которую я хочу, помимо того, что я могу вызвать в командной строке. – fyjham

ответ

1

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

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

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

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

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

+0

упакуйте некоторые довольно здоровенные ценники на те сторонние инструменты. Определенно выглядят полезными, но могут быть немного выше того, что мы надеялись потратить. Что касается вывода: Идеальное слово, я надеялся получить какое-то решение, я мог бы передать объект System.IO.Stream (возможно, настраиваемый, который отправляет его как в файл, так и в поток ответов), я подозреваю, d нужно обернуть любое решение в некотором коде, чтобы обработать его в объектах .NET, чтобы сделать его удобным для использования, но это в основном тот момент, который я хотел бы открыть из библиотеки, которую я пишу в основное приложение. – fyjham

+0

Я принимаю этот ответ, потому что он лучший, а щедрость почти отсутствует. Я позабочусь об этом позже, если напишу обертку FFmpeg (точное количество работы, которую я могу дать, будет зависеть от того, сделаю ли я это для компании, в которой я работаю или в свое время, - если я это сделаю в свое время я не могу открыть его с открытым исходным кодом, но могу дать несколько советов кому-то другому, кто может попробовать). – fyjham

1

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

+0

У меня просто был снимок, но если я ошибаюсь, он не поддерживает какие-либо форматы вывода, которые мне нужны? – fyjham

Смежные вопросы