Имам проблем с файлове, записани от източници на живо (уеб камери) и псевдоизточници на живо (снимки на екрана) в GStreamer. Получените файлове нямат времева дължина и в резултат изобщо не се възпроизвеждат в Media Player Classic. Те наистина се възпроизвеждат във Firefox, но без продължителност и понякога с увеличена скорост.
Изглежда няма значение какъв (псевдо-) източник на живо използвам, нито какъв кодек или контейнер. Историята винаги е една и съща; неправилни медийни файлове без зададена продължителност.
Въпреки това, когато добавя опцията "num-buffers=100" към dx9screencapsrc, src елементът изпраща EOS събитие след този брой буфери и след това файлът се изобразява правилно в MPC и Firefox. Така че събитието EOS изглежда прави нещо, така че файлът да се затвори правилно.
Опитах обичайните начини за спиране на конвейера (чрез setState(...)). Опитва се ръчно да се изпрати EOS събитие до всички елементи, като се прослушва EOS събитието в автобуса и след това излиза от конвейера. Всичко без резултат, файловете остават повредени.
Въпросът ми е как мога да спра тръбопровода, когато използвам (псевдо) източници на живо и създавам правилни файлове (т.е. в този случай има правилна времева дължина).
Използвам gstreamer-java с GStreamer 0.10 на Java 6 и Windows 8. Вземете следния конвейер като пример:
dx9screencapsrc ! video/x-raw-rgb,framerate=15/1 ! ffmpegcolorspace ! vp8enc ! webmmux ! filesink location=%s
В този момент не знам как да разреша този проблем. Всяка помощ е много ценена!
КОРЕГИРАНО Както се оказа, трябваше да изпратя EOS събитието само до елемента src, а не до всеки елемент в конвейера.