Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Ребят помогите пожалуйста разобраться! По Техзаданию нужна программа в которую будут загружаться видеофайлы, а она будет их воспроизводить по плэйлисту и по достижению конца ролика переключаться на следующий без подрыва!!! (т.е. без черного фона), и так пока плэйлист не закончится, а там уже переключаться на живое видео или стартовать плэйлист заново - это не важно.
Вообщем то прогу я написал, там используются 2 плеера одновременно. Алгоритм следующий:
1) Прога стартует и запускает два плэйера 2) Первый плеер отправляется на передний план и играет (второй в это время ждет на паузе) 3) Как только первый плеер закончил играть, подпрограмма проверяет условие достигнут ли конец плэйлиста и если нет то стартует второй плеер и переводит его на передний план, а в это время в первый плеер подгружается следующий ролик (но это все не видно для пользователя). 4) Как только второй плеер закончил играть происходит все то же самое что и в пункте 3, только для второго плеера. 5)Если конец плэйлиста достигнут то, в зависимости от условия, включается либо живое видео, либо плэйлист стартует заново.
Все это работает на Ура!!! Вот только когда плеер на заднем плане подгружает следующий ролик и проверяет все условия заметно секундное подтормаживание видео на переднем плане.
Это процесор, ОЗУ или Жесткий диск виноваты? Или Алгоритм в корне неверный? Демку программы я прикрепил (для работы необходим плагин NeobookDX)
PS Эта программа будет модулем для другой программы, где помимо видео играют еще и бегущие строки, погода, валюта и т.д. Но на производительность они мало влияют т.к. это все внешние Exe-шки и отрабатываться будут параллельно. Подобный софт на Необуке я устанавливал на один из объектов (Гипермаркет, где повсюду развешаны телики), так там он проработал три года без вылетов и зависаний ))) комп при этом ни разу не выключали! Но там реклама выдавалась одним файлом, (т.е. рекламный блок заранее монтировали и грузили этот файл на сервер) получалось очень неудобно (Что бы заменить один файл приходилось монтировать и просчитывать весь блок).
PSS Извините если запутанно получилось, это мое первое сообщение на форуме, Neobook использую очень давно, но все необходимое для себя находил на форуме (еще когда он на MMB сайте был).
файл pub можно прикрепить если не более 500кб иначе залейте на rghost
Добавлено (23 Мая 2013, 12:05) ---------------------------------------------
Цитата (Vasso)
заметно секундное подтормаживание видео на переднем плане. Это процесор, ОЗУ или Жесткий диск виноваты? Или Алгоритм в корне неверный?
вероятно все, даже формат видоса. чтобы решить проблему, нужно ее сперва воспроизвести. давайте материалы, демку, потом видосы если не удастся со своими повторить. Как задавать вопросы
Вообще у меня первый вопрос, зачем использовать платный плагин? Есть же бесплатный zmWMPLayer. Плюс ко всему Петр всегда помогает и находит решение или дополняет действия в плагин. Не хочешь читать хелп?
Да вобщем то не так уж дорого он стоит 30 у.е. (Если сравнить что специализированное П.О. в этом секторе стоит минимум от 10 000 у.е. за лицензию, та же Scala ICD) Я не столько программист (вернее совсем не программист) сколько инсталятор подобных систем (ИндорТВ) и порой из-за стоимости софта клиент отказывается от проекта в целом, ну ни понимает наш народ зачем ему платить еще и за программу которая должна по кругу ролики гонять (а в большинстве только это и требуется) стоимость сравнимую с ценой всей системы в целом. Вот и изголяемся как можем ))), где то ставим ТВ-сервера (они как ни странно дешевле), где то сами софт пишем. А плагин Петра по каким то причинам не подошел тогда, я сейчас не вспомню, но как только он (плагин) появился я его сразу опробывал. В любом случае и этот плагин и плагин Петра не умеют некоторых вещей (например нельзя наложить прозрачный логотип поверх видео и т.д.) Но с этим приходится мириться (мало кому такой функционал нужен) А вообще я бы хотел заказать подобный плагин, но это уже в другом сообщении.
Добавлено (23 Мая 2013, 13:12) --------------------------------------------- Для этих целей почти подходят программы для атоматизации ТВ-вещания, тот же DigiTV, но они не умеют делать видеоокно любого размера (т.е. всю графику они накладывают по верх видеоматериала, ну для канала по идее большего и не надо) К тому же подобный софтработает только со спец железом и падает как ни обидно чаще чем самописные программы (подозреваю что это из-за его универсальности).
Как только первый плеер закончил играть, подпрограмма проверяет условие достигнут ли конец плэйлиста и если нет то стартует второй плеер и переводит его на передний план, а в это время в первый плеер подгружается следующий ролик (но это все не видно для пользователя).
это можно делать заранее, не дожидаясь конца ролика. Попробуйте поработать с командой dxAddMarker. А в момент окончания ролика используйте только "подмену" плеера без лишних команд, чтобы сэкономить время. Подозреваю что позицию маркера-триггера нужно будет подрасчитать в процессе воспроизведения для каждого видоса (скажем, -0,5сек от конца). Потом еще рассмотрите такой момент, в момент подмены плеера во избежание любых черных экранов, второй плеер УЖЕ должен начать играть видос. Во избежание наложений звука, нужно его приглушать на этот период (dxFadeIn/Out или просто вырубать). Вам нужно скомпенсировать все миллисекундные задержки во время загрузки видоса плеером, которые неизбежны, даже при проигрывании готового плейлиста WMP Как задавать вопросы
Отладчик открыт! Файл еще не компилировал! Файлы тяжелые в вещательном формате 30 сек весит примерно 200Мб, видимо дело в жестком диске, ведь оба файла находятся на одном и том же харде и при загрузке наверное падает скорость чтения. Хотя нет я ж в Mpeg2 тоже пробывал, может мой старый Core2Duo не справляется.
а без этого в данной реализации проекта, он ничем не отличается от воспроизведения готового плейлиста соотв формата (что даже проще и без заморочек). Как задавать вопросы
To DEMBEL Я так примерно и делаю, файл в следующий плеер начинает грузиться когда поверх него уже запущен плеер с видео и когда плеер который сверху заканчивает играть снизу его поджидает готовый плеер с загруженным файлом и команда ФИНИШ говорит ему только ПЛЭЙ и Переместись на передний план, а уже потом отработавшему плееру на заднем плане говорит - УДАЛИ DX, создай - DX заново, загрузи в него такойто файл, и поставь на паузу. Вот он (плеер на заднем плане) и ждет уже готовый с загруженным видео когда ему придет команда играть. Подтормаживания на верхнем плеере наблюдаются как раз только тогда, когда удаляется создается и загружает файл плеер на заднем плане, т.е если я буду расчитывать длину ролика подтормаживания переместятся ближе к концу воспроизведения или я не прав?
Добавлено (23 Мая 2013, 13:50) --------------------------------------------- To mishem Совсем незаметны тормоза в первые 2-3 сек. видео? Если так то это скорее всего мой древний комп с Семеркой тормозят (тьфу на нее три раза )
а без этого в данной реализации проекта, он ничем не отличается от воспроизведения готового плейлиста соотв формата (что даже проще и без заморочек).
А то!!! Обычный плэйлист сделать не проблема, к сожалению в подобных системах отсутствие подрыва сигнала должна быть по умолчанию (не знаю как дэфакто правильно пишется ).
Вот если бы можно было программно перед запуском просчитать все ролики в один и играть только его было бы вообще замечательно ))).
Я имею ввиду не первый ролик, а второй третий и все поседующие, проверь пожалуйста если не трудно.
Добавлено (23 Мая 2013, 14:03) ---------------------------------------------
Цитата (mishem)
что значит просчитать?
Это слэнг такой у видеоинженеров значит закодировать всю последовательность в один формат и ее играть, это глупость с моей стороны конечно - представляю сколько прога будет весеть перед запуском
я так понял вы хотите избежать монтажа всех роликов в один, что экономит время и деньги, и имитировать т.н. бесшовное воспроизведение отдельных роликов. Это должно получиться сделать, причем независимо от конфига компа, если все работает так как вы говорите и следующий ролик уже "предзагружен", других потерь производительности я не вижу. Как задавать вопросы
Ну нарезал два файла по 20 секунд весом по 400 мб. Не вижу и не слышу я задержек.
Цитата (Vasso)
закодировать всю последовательность в один формат и ее играть
А как часто плей лист меняться будет?
Цитата (Vasso)
представляю сколько прога будет весеть перед запуском
А почему прога то должна весить? Файл то можно отдельно от проги кидать. И есть консольный кодировщик которым можно объединять файл и подсовывать программе.
но стартовать второй плеер должен все равно на доли секунды раньше чем закончит играть первый.
Ну я тоже такого мнения придерживаюсь. Тем более что можно элементарно отслеживать. Есть же переменные с продолжительностью ролика. Присваивать тамеру а не подпрограмме запуск плеера через время продолжительности минус какое то время....
Хотя... Я ж говорю что нам все тонкости не известны. Если овчинка выделки не стоит, то нечего и заморачиваться. Не хочешь читать хелп?
А почему прога то должна весить? Файл то можно отдельно от проги кидать.
да, если вы компилируете все видосы в программу, это смысла не имеет. Во первых, для смены программы воспроизведения (добавление/удаление роликов) придется заменять всю программу, лучше тогда и ролик перемонтировать. Во вторых, все ролики все равно придется извлекать из проекта для проигрывания.
Смысл тогда здесь лишь имеет создать "платформу" для бесшовного воспроизведения, чтобы любой чел в любое время менял лишь "плейлист" программы или внешние файлы роликов в папке без всяких заморочек. Как задавать вопросы
я так понял вы хотите избежать монтажа всех роликов в один, что экономит время и деньги, и имитировать т.н. бесшовное воспроизведение отдельных роликов. Это должно получиться сделать, причем независимо от конфига компа, если все работает так как вы говорите и следующий ролик уже "предзагружен", других потерь производительности я не вижу.
Все верно!!! Это работает, единственное что наблюдаются - это небольшие подтормаживания видео на верхнем плеере когда снизу выполняется предзагрузка ролика, это по условию программы происходит когда верхний плеер отрабатывает 1-3 сек. видео, т.е. Верхний плеер уже играет а в фоне обрабатывается какой то код. Я так понимаю это проблема моего компа? Здесь же не нужна никакая многопоточность (которой кстати нету все равно)?
Добавлено (23 Мая 2013, 14:26) ---------------------------------------------
Цитата (mishem)
А почему прога то должна весить?
Нет не весить, а весеть когда все файлы в один объеденять будет. Да нет это глупость конечно с моей стороны!
Добавлено (23 Мая 2013, 14:28) --------------------------------------------- Т.е. зависнет она )
необязательно, можно проигнорировать ошибку в браузере, продолжить и засунуть паб
Не советую, я эту ошибку ввёл специально, ибо был какой-то нехороший прикол с индексацией проектов mmb и nb. Поэтому, не советуй такие вещи, а лучше свой пост удали, ну и мой, как прочтёшь.
p. s. mishem правильно сказал - архивируйте файлы, эту цель я и преследовал.
ок ладно
Сообщение отредактировано DEMBEL - Чт, 23 Мая 2013, 14:39
А логика большой программы очень простая сверху, снизу, сбоку загружаются доп модули (бегущая строка, RSS-новости, погода) эти модули просто программы на воспроизведение видео они никак не влияют и управляются отдельно. А посередине играется видео из файлов и видео с карты захвата (в моем случае Canopus ADC-300), так вот внешнее видео (с карты) играется с оформлением, а видео из файлов поверх всего контейнера (рекламным роликам оформление не нужно) Там будет кнопки (вернее уже есть) Плэй и стоп и при включении сервера на плэй отрабатывается рекламма затем идет живое видео с заданным интервалом, ну + всякая ерунда (Информация о закрытии, открытии магазина в заданное время - это просто слайды) На счет звука не уверен что он вообще нужен (обычно в таких центрах есть система звукового оповещения и с него все время играет радио, телики в таком случае будут только мешать) А рекламма для таких систем делается специально, что бы и без звука все понятно было).
А выглядеть все должно примерно так:
Добавлено (23 Мая 2013, 15:05) --------------------------------------------- А когда нажата кнопка стоп на переднем плане играется живое видео (FasionTV в данном случае) В это время можно заменить в плэйлисте информацию (удалить, поменять ролики и т.д.) Окно вывода внешнее оно работает на втором экране (который через сплитер (делитель сигала) раздает видео на телики (так что манипуляций с основным окном посетители не видят)), ну там еще много чего используется сканконверторы (преобразователи для аналогого сигнала и т.д.) но это все железо, на логику приложения это невлияет.
Добавлено (23 Мая 2013, 15:16) ---------------------------------------------
Цитата (DEMBEL)
никаких тормозов не наблюдаю, только в момент смены плееров черный экран заметен
Это плохо сейча буду переделывать как вы сказали (((
Добавлено (23 Мая 2013, 15:17) --------------------------------------------- Фотки снизу это как примерно должно выглядеть когда будет готово )
Это плохо сейча буду переделывать как вы сказали (((
ну конечно, плееру чтоб стартануть видос надо его немного буферизовать сначала, на это уходят миллисекунды. С плохим железом еще заметнее. Надо с запасом перекрыть этот промежуток времени. Хотя по мне так и сейчас вполне прилично смотрится все, если не докапываться.
я щас как доделаю отпишусь, удалось обмануть плеер или нет. Как задавать вопросы
По моему так правильнее будет. Зачем зацикливать первый плеер если все равно работают два и в обоих срабатывает подпрограмма. Особо глубже не стал копать.
В листбоксе надо просто первый пункт перемещать в конец и тогда много лишних строк можно убрать, а получать все время значение первого пункта.
Но это так, с моей колокольни.
Попробовал через таймер, не то... Идет скрежет звука. Нужно что бы обязательно один ролик закончил играть. Но это все на скорую руку, не особо вникал.
Добавлено (23 Мая 2013, 15:55) --------------------------------------------- О блин. Сейчас глянул, деактивацию объектов тоже надо после условия вписать, а активацию после else вообще убрать.
mishem Спасибо большое!!! А что будет если пользователь только один ролик загрузит? По моему вылетит ошибка у второго плеера. А по поводу переноса пункта листбокса вниз, я тоже думал, но плэйлист перед глазами пользователя будет необходимо, что бы он оставался в неизменном виде и было понятно какой по очереди файл в данный момент проигрывается.
Добавлено (23 Мая 2013, 16:18) --------------------------------------------- А плеер я зациклил просто на время создать условие что бы проигрывался по очереди в обоих плеерах один и тот же файл не проблема. Там и в кнопке добавить, если в диалоге потом отмену нажать тоже пустой пункт добавляется, это в основной программе уже решено.
Листбокс можно вообще убрать и сделать просто строку, или всплывающую строку какой файл проигрывается. Зачем на весь список то смотреть? Не хочешь читать хелп?
А нет все понял!!! Прости туплю! Но тогда получается что если роликов больше чем один, то оба плеера загрузят один и тот же ролик, а надо чтобы первый и второй, при старте это не страшно )))
Добавлено (23 Мая 2013, 16:25) --------------------------------------------- Т.е. Условий должно быть три: