Із зростанням популярності YouTube.com багато людей хотіли організувати подібний сервіс, але не знаєте як це зробити. Якщо ви один з них – ця стаття для вас
Особливості
Перш за все опишемо основний функціонал сайту (а також визначити і ролі користувачів) :
- Дивитися відео онлайн
- Завантажити відео
- Управління користувачами
- Управління файлами
Особливості веб 2.0
Ми повинні розширювати базові функції, тому що ми повинні отримати більше трафіку:
- перегляд коментарів до відео
- пошук файлів (використовуючи категорії або теги)
- коментувати відео
- запис відео з веб (через веб-камеру)
- призначити категорію для відео
- призначити тег для відео
- відео курс
- організувати список друзів
- управління обраним
- відіслати на пошту
- Управління коментарями
- Керування категоріями
Це, звичайно, не всі функції YouTube, але хоч щось почати з
Конфігурація Сервера
Наша система буде заснована на світильник:
- Лінукс
- Apache (версія 2.2 і вище)
- MySQL (версія 5.0 і вище)
- PHP (версія 5.2 і вище)
Усунення неполадок
А тепер опишу проблеми, які можуть виникнути
Перетворення Відео
Щоб отримати увагу користувача, ми повинні дозволити їм завантажувати відео в будь-якому форматі, але це більш зручно для користувачів, щоб отримати відео в один певний формат (це дозволить не мати кодеки-зоопарк на комп’ютері і з іншого боку, якщо сайт вимагає деяких додаткових дій від користувача – це дуже ймовірно, що користувач забуває свій сайт – ви знаєте, що ми ліниві. І що можна зробити з цим? Відповідь очевидна – конвертування відео файлів в один формат і формат повинен бути flv-файлів. Флеш-відео можна переглянути на більшості операційних систем, оскільки він використовує широко поширений Adobe програмне забезпечення флеш-плеєр встановлений на більшості браузерів, і цей формат також підтримується багатьма програмами для відтворення відео, таких як MS mplayer і майже всі інші гравці.
Нам знадобляться наступні програмні засоби (всі opensource):
Ви можете використовувати 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 | дата останнього зміни |
стовпцем file_id | Ідентифікатор файлу (файлів) |
mirror_id | Ідентифікатор дзеркала (Дзеркала) |
статус | поточний стан файлу завантаження / ОК |
date_create | |
date_update | дата останнього зміни |
ідентифікатор | автоінкрементний поля |
під | ідентифікатор батьківського категорії |
назва | назва категорії |
… | іншого поля, наприклад, metadescription, metakeywords |
ідентифікатор | автоінкрементний поля |
слово | теге слова |
ідентифікатор | автоінкрементний поля |
у 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 менеджер
Оцінка
Статичні сторінки | наприклад, “Контакти”, “Умови використання” і т. д. | 1ч/сторінка |
Пошук файлу | простий пошук за кількома параметрами | 6ч |
Хмара Тегів | 8ч | |
Дивитися відео | Flv-відео плеєр | 16ч |
Перегляд коментарів | 6ч | |
Реєстрація | Реєстрація та активація по електронній пошті | 12год |
Забули пароль | 2ч | |
Вхід/Вихід | 2ч | |
Завантажити файл | 14ч | |
Запис відео | Потрібно медіа-сервер:
УФМС, позитив (з лютого 2007) або Red5 (відкритим вихідним кодом) |
16ч |
Прогрес-бар | 16ч | |
Відправити Коментар | 4ч | |
Файл Ставки | 2ч | |
Керування закладками | створити/редагувати/видалити | 8ч |
Управління користувачами | Імена і дані учасників, які були зареєстровані перераховані із зазначенням дати їх рахунки була створена та інша інформація користувача. Варіанти доступні для адміністратора: Перегляд відомостей-членами, членами заборона, шукати користувачів по імені або прізвища або імені користувача і т. д. |
16ч |
Керування категоріями | 16ч | |
Дизайн | 32ч | |
Проектування Бази Даних | 16ч | |
Проектування Архітектури Проекту | 32ч | |
Організувати Файлове Сховище | Від 8 до 96ч | 8ч |
Перетворити процес | 20ч | |
Налаштування середовища | налаштувати веб-сервер, конвертувати-сервер, дзеркала | 40х |
Розвиток | 256h | |
Тестування | 30%-50% від всіх розробок | 85 год |
Управління | 10% всього часу | 40х |
Отже, ми маємо 421 годин, або близько 2,5 місяців розвитку. Ви очікували на таку кількість? Я думав, він буде більше 🙂
Це дуже оптимістична оцінка, яка включає в себе ряд припущень:
- розробники будуть використовувати систему ОСББ, схожими на phpXCore або Zend фреймворк
- розробники знайомі з СМФ вибрали (тобто не вчитися під час кодування)
- найпростіше файлове сховище буде використовуватися (всі дзеркала зберігають всі файли)
Якщо розвиток буде зроблено з нуля, ви можете сміливо множити цю оцінку на 2.
Отже, вартість проекту складе не менше 10 000 $ …
С. П.
Головна проблема не в системі, головна проблема залучає аудиторію. Хто буде використовувати ваш сервіс, якщо є ютуб (і навіть сайт pornotube)? Якщо у вас є ідеї, пишіть в коментарях…
На момент написання статті домен myphptube.com не було зареєстровано. Якщо ви зареєструєте його, відправити пиво на мою домашню адресу… 😉