Із зростанням популярності YouTube.com багато людей хотіли організувати подібний сервіс, але не знаєте як це зробити. Якщо ви один з них – ця стаття для вас

Особливості

Перш за все опишемо основний функціонал сайту (а також визначити і ролі користувачів) :

  • Гість
    • Дивитися відео онлайн
  • Член
    • Завантажити відео
  • Адміністратор
    • Управління користувачами
    • Управління файлами
  • Особливості веб 2.0

    Ми повинні розширювати базові функції, тому що ми повинні отримати більше трафіку:

  • Гість
    • перегляд коментарів до відео
    • пошук файлів (використовуючи категорії або теги)
  • Член
    • коментувати відео
    • запис відео з веб (через веб-камеру)
    • призначити категорію для відео
    • призначити тег для відео
    • відео курс
    • організувати список друзів
    • управління обраним
    • відіслати на пошту
  • Адміністратор
    • Управління коментарями
    • Керування категоріями
  • Це, звичайно, не всі функції YouTube, але хоч щось почати з

    Конфігурація Сервера

    Наша система буде заснована на світильник:

    • Лінукс
    • Apache (версія 2.2 і вище)
    • MySQL (версія 5.0 і вище)
    • PHP (версія 5.2 і вище)

    Усунення неполадок

    А тепер опишу проблеми, які можуть виникнути

    Перетворення Відео

    Щоб отримати увагу користувача, ми повинні дозволити їм завантажувати відео в будь-якому форматі, але це більш зручно для користувачів, щоб отримати відео в один певний формат (це дозволить не мати кодеки-зоопарк на комп’ютері і з іншого боку, якщо сайт вимагає деяких додаткових дій від користувача – це дуже ймовірно, що користувач забуває свій сайт – ви знаєте, що ми ліниві. І що можна зробити з цим? Відповідь очевидна – конвертування відео файлів в один формат і формат повинен бути flv-файлів. Флеш-відео можна переглянути на більшості операційних систем, оскільки він використовує широко поширений Adobe програмне забезпечення флеш-плеєр встановлений на більшості браузерів, і цей формат також підтримується багатьма програмами для відтворення відео, таких як MS mplayer і майже всі інші гравці.

    Нам знадобляться наступні програмні засоби (всі opensource):

  • з mencoder або ffmpeg
  • flvtool2 (потрібен Рубін)
  • Пакет програми PHP (‘example.php містить приклад з використанням mencoder) або класу через FFmpeg (‘ffmpeg.example1.php’ використовує ffmpeg)
  • Ви можете використовувати mplayer для отримання додаткової інформації про оригінальні відео-файл.

    Якщо ми правильно зібраний і встановлений, тепер ми можемо конвертувати…

    Завантажити

    Люди не люблять сидіти і чекати, поки файл завантажиться на сервер, користувачі цікаві, тому ми повинні показати прогрес бар:

    • на HTTP://www.emllabs.com/article.php?articleId=121/ (використання Flash8 і PHP)
    • на HTTP://Томаш.epineer.ГП/tesupload/
    • на HTTP://www.raditha.com/megaupload/
    • на HTTP://www.obokaman.com/p/descripcion-y-fuentes-del-upload-php-ajax-con-barra-de-progreso-1596
    • на HTTP://labs.beffa.org/w2box/demo/
    • на HTTP://trydobe.com/?page_id=3
    • на HTTP://ecosmear.com/relay/ (хороший приклад, використовуючи Perl)

    Всі посилання в форум по xajax http://community.xajaxproject.org/viewtopic.php?pid=10100

    Ресурси

    Ілюстрації ми будемо використовувати той же сервер для сайту прямо зараз і перетворення відео, веб-сайт буде швидше мертвий, ніж живий. Для цього нам доведеться використовувати ще один (як мінімум) сервер, який буде приймати оригінальні файли з інтернету і поклав його назад перетворюється в деякий час. Іншими словами нам потрібно більше, ніж 1 сервер для створення робочого розчину.

    Розподіл навантаження

    Якщо ми зберігаємо всі дані в один сервер, він не буде нести навантаження. Ми повинні мати декілька серверів для зберігання даних :

    • на HTTP://mirror1.myphptube.com
    • на HTTP://mirror2.myphptube.com
    • і т. д.

    Ви повинні самі вирішити, як розподілити навантаження. Ви повинні оцінити обсяг даних, які будуть зберігатися, а потім вибрати відповідну схему, (припустимо, що один користувач завантажує на сервер 20MB в місяць (234Gb 1000 користувачів в рік), а не популярні файли зберігаються не більше року):

    • Дані, що зберігаються ~ 0.3 ТБ – 1.5 ТБ:ми тримаємо все відео на кожне дзеркало. У нас є головне дзеркало – сервер, на якому конвертувати відео завжди з’являється першим і всі інші дзеркала, синхронно з нею
    • Обсяг даних ~ 1.5 ТБ – 3 Тб:
      Все відео зберігаються в одному центральному сервері, якщо відео набирає популярність, його заливають на інші дзеркала
    • Збережених даних > 3 ТБ:
      Відео додано найближчим дзеркало (приклад : припустимо, що відео, викладене з Китаю буде в основному популярні в Китаї, таким чином, помістити його на дзеркало в Китаї) із зростанням популярності цього відео ми будемо копіювати його на сервер, найближче до епіцентру популярності (приклад : китаєць, що живе в США, відео, завантажити до дзеркала, розташованих у Сполучених Штатах, дивився відео в Китаї, в цій ситуації вони файли будуть скопійовані на китайський сервер)

    Це не статистичні цифри, вони для наочності. Китай привів як приклад (нічого особистого). Напишіть свою думку в коментарях…

    Бази даних

    Далі я буду описувати просту архітектуру БД:

    користувачі
    ідентифікатор автоінкрементний поля
    логін унікальний логін
    пароль зашифрувати пароль
    електронної пошти електронної пошти користувача
    actcode код активації
    роль Перерахування(гість/користувач/адмін)
    статус не активний / активний / вимкнути
    date_create
    date_update дата останнього зміни профілю
    date_login дата останнього входу
    іншого поля, наприклад, ім’я, прізвище
    друзі
    ідентифікатор автоінкрементний поля
    user_id1 ID користувача
    user_id2 ID користувача
    статус запит / ОК / скасування
    date_create дата відправлення запиту
    date_update дати прийняти або відмовив
    файли
    ідентифікатор автоінкрементний поля
    назва назва відео файлу
    файл ім’я файлу у файловій системі
    статус не конвертувати / процес / ОК
    доступ до громадських / учасників / тільки друзям / тільки приватна
    author_id Ідентифікатор власника (користувача)
    category_id Ідентифікатор категорія (категорії)
    date_create
    date_update дата останнього зміни
    іншого поля, наприклад, довжина, опис
    дзеркала
    ідентифікатор автоінкрементний поля
    URL-адреса адреса дзеркала
    date_create
    date_update дата останнього зміни
    mirrors_link
    стовпцем file_id Ідентифікатор файлу (файлів)
    mirror_id Ідентифікатор дзеркала (Дзеркала)
    статус поточний стан файлу завантаження / ОК
    date_create
    date_update дата останнього зміни
    категорії
    ідентифікатор автоінкрементний поля
    під ідентифікатор батьківського категорії
    назва назва категорії
    іншого поля, наприклад, metadescription, metakeywords
    теги
    ідентифікатор автоінкрементний поля
    слово теге слова
    tags_link
    ідентифікатор автоінкрементний поля
    у tag_id ID тегів (теги)
    стовпцем file_id ідентифікатор файлу (файлів)
    коментарі
    ідентифікатор автоінкрементний поля
    author_id Ідентифікатор власника (користувача)
    стовпцем file_id ідентифікатор файлу (файлів)
    повідомлення текст повідомлення
    date_create
    ставка
    ідентифікатор автоінкрементний поля
    author_id Ідентифікатор власника (користувача)
    стовпцем file_id ідентифікатор файлу (файлів)
    ставка цілочисельне значення, наприклад, 0 до 10
    date_create
    повідомлень
    ідентифікатор автоінкрементний поля
    author_id Ідентифікатор власника (користувача)
    ид_пользователя Ідентифікатор отримувачів (користувачів)
    тип наприклад, запит на додавання в друзі-повідомлення-відповідь / адмін
    author_folder вихідні/проект/видалити
    user_folder вхідні/видалити
    user_status читати чи ні
    date_create
    закладки
    ідентифікатор автоінкрементний поля
    author_id Ідентифікатор власника (користувача)
    стовпцем file_id ідентифікатор файлу (файлів)
    назва назва посилання
    опис опис
    date_create

    Невелика примітка:

    • Для стовпців date_create і date_update використовуємо функцію gmdate (‘р-м-д ч:я:и’) – МСК, це полегшить життя в майбутньому при відображенні часу на сайті

    Команда

    Як зібрати команду для розробки такого проекту краще? Я пропоную наступне:

    • 2 PHP-розробника
    • Flash Розробник / Дизайнер
    • 1 для Unix-адміністратора
    • 1 тестер
    • 1 менеджер

    Оцінка

    Гість
    Користувач
    Адмін
    Інші
    Загальна
    Загальна: 421h
    Статичні сторінки наприклад, “Контакти”, “Умови використання” і т. д. 1ч/сторінка
    Пошук файлу простий пошук за кількома параметрами
    Хмара Тегів
    Дивитися відео Flv-відео плеєр 16ч
    Перегляд коментарів
    Реєстрація Реєстрація та активація по електронній пошті 12год
    Забули пароль
    Вхід/Вихід
    Завантажити файл 14ч
    Запис відео Потрібно медіа-сервер:

    УФМС, позитив (з лютого 2007) або Red5 (відкритим вихідним кодом)

    16ч
    Прогрес-бар 16ч
    Відправити Коментар
    Файл Ставки
    Керування закладками створити/редагувати/видалити
    Управління користувачами Імена і дані учасників, які були зареєстровані перераховані із зазначенням дати їх рахунки була створена та інша інформація користувача.
    Варіанти доступні для адміністратора: Перегляд відомостей-членами, членами заборона, шукати користувачів по імені або прізвища або імені користувача і т. д.
    16ч
    Керування категоріями 16ч
    Дизайн 32ч
    Проектування Бази Даних 16ч
    Проектування Архітектури Проекту 32ч
    Організувати Файлове Сховище Від 8 до 96ч
    Перетворити процес 20ч
    Налаштування середовища налаштувати веб-сервер, конвертувати-сервер, дзеркала 40х
    Розвиток 256h
    Тестування 30%-50% від всіх розробок 85 год
    Управління 10% всього часу 40х

    Отже, ми маємо 421 годин, або близько 2,5 місяців розвитку. Ви очікували на таку кількість? Я думав, він буде більше 🙂

    Це дуже оптимістична оцінка, яка включає в себе ряд припущень:

    • розробники будуть використовувати систему ОСББ, схожими на phpXCore або Zend фреймворк
    • розробники знайомі з СМФ вибрали (тобто не вчитися під час кодування)
    • найпростіше файлове сховище буде використовуватися (всі дзеркала зберігають всі файли)

    Якщо розвиток буде зроблено з нуля, ви можете сміливо множити цю оцінку на 2.
    Отже, вартість проекту складе не менше 10 000 $ …

    С. П.

    Головна проблема не в системі, головна проблема залучає аудиторію. Хто буде використовувати ваш сервіс, якщо є ютуб (і навіть сайт pornotube)? Якщо у вас є ідеї, пишіть в коментарях…

    На момент написання статті домен myphptube.com не було зареєстровано. Якщо ви зареєструєте його, відправити пиво на мою домашню адресу… 😉