2010-05-05 3 views
3

Наш сайт содержит несколько списков видеороликов YouTube с их миниатюрами, связанными с самими фильмами. Мы получаем URL-адреса эскизов из API YouTube и hotlink для них на месте на серверах YouTube. Таким образом, наши изображения тегов выглядят как:Как грациозно обрабатывать миниатюры YouTube сломанных изображений при снятии видео?

<img src="http://i.ytimg.com/vi/o6CHqSN7O-o/2.jpg" alt="" width="133" height="78" /> 

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

Есть целый ряд решений:

  • Скачать эскизы и хранить их локально - фильм не будет работать, если он будет удален, конечно, но это нормально, это будет разъяснено она была удалена, и мы избегаем сломанного изображения.

  • Периодически проверяйте с помощью API, чтобы увидеть, изменилось ли уменьшенное изображение изображения, если оно больше не существует, замените наш собственный «снятый фильм» миниатюрой. Это довольно тяжело для вызова API!

  • Использованию JavaScript для замены сломанных изображений (не нравится один много)

Наше идеальное решение было бы указать IMG SRC в папку на YouTube, который будет отображать дружественный «шаг удален «изображение, когда фильм опускается. Однако, похоже, это не существует.

Кто-нибудь еще имел дело с этим? Благодаря!

ответ

1

Запросить эскиз с YouTube на серверной стороне, сохранить его в кеш на своем сервере, отобразить кешированное изображение. Таким образом, у вас все еще будет миниатюра на вашем сервере, даже если оригинал будет удален. Миниатюра будет запрашиваться только один раз для каждого видео. PHP-как псевдо-код:

Один ловушкой: если изменения уменьшенные, ваша кэшируются версия остается неизменным; не общая проблема с видео YT. Это можно решить, сделав кеш более интеллектуальным - но вам нужно будет начать хранить метаданные (возраст, максимальный возраст ...) и обрабатывать заголовки кеширования HTTP. Кэширование псевдокода:

  • - объект в кеше?
    • если да, то кешированная версия свежая? (Макс возраст и т.д.)
      • если есть более новая версия удаленная (последнее изменение, ETag и т.д.), скачать и хранить
  • еще скачать и сохранить раздельную версию
  • если «загрузить и сохранить» возвращает 404, измените изображение на «удалить»
+0

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

+0

@mrjf: Да, это точно так. К сожалению, сохранение обновленного эскиза довольно нетривиально, так как для него требуется более сложная система кэширования (как указано в моем редактировании под кодом: «проверьте этот миниатюру, если мы не сделали это недавно»). Тем не менее, вы все равно будете получать устаревшие данные время от времени. – Piskvor

0

Используйте PHP для запроса файла и помещайте его только в том случае, если код ответа HTTP равен 200. Если это 404 или какая-либо другая ошибка, поставьте там что-то еще (вы решите).

+0

Это хорошая идея для некоторых случаев, определенно.Это может быть немного тяжело для наших целей - если у нас было 100 видеороликов на странице, мы будем делать запрос на каждое уменьшенное изображение каждый раз, когда загружается страница. Или мы можем периодически его выполнять и периодически проверять, но это не сильно отличается от проверки API. Спасибо за идею, правильно ли я понял эту концепцию? Любой способ избежать всех этих вызовов? – mrjf