Десятые сутки пылают станицы, или как делать скриншот из Youtube плеера

Пылают станицы и плавятся мозги. Мы пытаемся получить screenshot flash-приложения, построенного на основе YouTube Player SDK или фрагмент заданной области, заданного кадра YouTube-видео. Уже долго ломаем над этим голову. Пока ничего не получается.

Ниже методы, которые мы уже опробовали:

1) Получение screenshot методами Flash. Этот вариант не работает т.к. YouTube запрещает доступ к своему плееру помимо методов разрешенных в YouTube Player SDK (попытки обращения к самому приложению запрещены файлами политики crossdomain.xml на серверах YouTube). В багтрекере YouTube Player SDK запрос на отмену таких security ограничений отклонен с резолюцией Won't fix:

2) Фотографирование на стороне клиента методами JS с помощью библиотеки html2canvas (и подобных). html2canvas и подобные библиотеки не фотографируют Flash-приложения.

3) Фотографирование на стороне сервера с помощью серверного WebKit. Решение не подходит, т.к. на стороне сервера не удается задать правильный кадр видео (YouTube player позволяет позиционироваться только с точностью до keyframe, э это не подходит так как нужна большая точность, так как объект может уже сместиться).

4) Получение скриншота из RTSP потока, полученного с помощью YouTube API. Позволяет получить скриншот только с точночтью до keyframe. Что для нас не подходит. (нужна большая точность)

Ситуация уже входит в режим «злобного спортивного интереса». Я знаю что на Хабре нам помогут и не хочу чтобы это выглядело как попытка дополнительного мотивирования, но в качестве личной благодарности, тому кто поможет нам решить эту «загадку» мы подарим новый ipad или любой другой похожий планшет на выбор. А также выразим свою искреннюю благодарность и восхищение.
  • Вопрос задан
  • 6316 просмотров
Пригласить эксперта
Ответы на вопрос 6
alexk24
@alexk24
Чем вы RTSP пытались получить?
RTSP из YouTube API + ffmpeg должен дать нужный кадр.
Ответ написан
pomeo
@pomeo
cvlc rtsp://v7.cache4.c.youtube.com/CiILENy73wIaGQlTJ8ZFBv0wtxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp --start-time=31 --run-time=1 --vout=dummy --aout=dummy --video-filter=scene --scene-format=jpeg --scene-replace --scene-ratio=1 --scene-prefix=snapshot --scene-path=/directory/
на выходе получаем скриншот 31 секунды в /directory/snapshot.jpg
--start-time с какой секунды начинать
--run-time после секунды останавливаться, можно заменить на --stop-time
Ответ написан
int03e
@int03e
Предполагал нечто похожее (заабузили ютуб в прошлом). Тем не менее, цитата

As I mentioned before, if you want to select a thumbnail that best represents your video then become a partner. If you think your channel isn't suitable then work on it to make it more attractive to partnership.
.
Ответ написан
Комментировать
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Win7 -> Ножницы, полный принтскрин экрана
Ответ написан
Комментировать
AlexBabin
@AlexBabin Автор вопроса
К сожалению нет, эти варианты не подходят.

1. У ffmpeg/VCL метод декодирования фреймов отличает от флешового, поэтому мы никогда не попадем в нужный кадр. Можно конечно выдавать несколько кадров из секундного отрезка, но нам нужен автоматизм, без выбора кадра пользователем.

2. Работа на сервере заранее плоха тем, что в зависимости от количества пользователей и временного отрезка на видео, где нужно сделать скриншот, будет кратно расти время обработки. Т.е. юзеры начнут вставать в очередь и это будут сначала секунды, а потом и минуты при сверхбольших объемах. Мы хотим добиться получения изображения менее, чем за секунду, при любом количестве запросов.
Ответ написан
macik_spb
@macik_spb
Ф-ф-фрилансер :))
Чем тема-то закончилась?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы