{"id":58959,"date":"2008-12-17T20:23:04","date_gmt":"2008-12-17T20:23:04","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wordpresscom-video-server\/"},"modified":"2010-06-03T22:12:54","modified_gmt":"2010-06-03T22:12:54","slug":"wordpresscom-video-server","status":"closed","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wordpresscom-video-server\/","author":245821,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"","stable_tag":"trunk","tested":"2.8","requires":"2.6","requires_php":"","requires_plugins":"","header_name":"","header_author":"","header_description":"","assets_banners_color":"","last_updated":"2010-06-03 22:12:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":5918,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","screenshots","changelog","other_notes"],"tags":[],"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[],"plugin_category":[],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-58959","plugin","type-plugin","status-closed","hentry","plugin_committers-awflasher","plugin_committers-hailin"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/wordpresscom-video-server.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Note that as of Sep, 17, 2009, this plugin has been migrated to WordPress Code:\nhttp:\/\/code.trac.wordpress.org\/<\/p>\n\n<p>This current plugin download page is no longer maintained.<\/p>\n\n<p>Discussions and feedbacks: \nhttp:\/\/wpvideo.wordpress.com\/<\/p>\n\n\n\n<p>This package contains the video solutions framework, including transcoder and administration interface utilities, written in PHP. \nThe code was developed by Automattic, Inc., and powers WordPress.com video solutions.\nIt supports multiple formats, including HD, and also supports open video (theora\/ogg). \nIt is an open source project, which means you can reuse it, build upon it, and share it with the community.<\/p>\n\n<p><strong>Warning<\/strong>\n*This plugin is different from other plugins because it can not be used \"out-of-the-box\".\nIt is intended for self-hosted large scale WordPress MU sites that want to develop their own customized video solutions. \nIn addition to Web servers for WordPress MU , it requires at least one file server and one dedicated video transcoder. \n(although it will work on single server system as well). *<\/p>\n\n<p>Contained is a whole package of video solution code. \nIt can be used as the foundation for a full-fledged video system. \nIndividual components such as the video player and transcoder are reusable as well.<\/p>\n\n<p>The video architecture has three key steps:<\/p>\n\n<ol>\n<li><p>User uploads raw video to admin web server<\/p><\/li>\n<li><p>Transcoder transcodes the video into h.264 mp4 (standard, DVD, and HD), and produces thumbnails<\/p><\/li>\n<li><p>File server downloads the mp4 and thumbnail images, then replicates files<\/p><\/li>\n<\/ol>\n\n<p>The screenshots section contains the video architecture diagram.<\/p>\n\n<p>Send your feedback or questions to: hailin AT automattic.com<\/p>\n\n<!--section=installation-->\n<p>Steps to modify and deploy the video solution:<\/p>\n\n<p>1.\nMake sure the following directories under your WordPress root directory already exist. \nCreate them if necessary: wp-content\/mu-plugins  and wp-content\/plugins\/video\/<\/p>\n\n<p>Copy files in server\/mu-plugins\/ to your_WP_root\/wp-content\/mu-plugins; \nand copy files in server\/plugins\/video\/ to your_WP_root\/wp-content\/plugins\/video\/<\/p>\n\n<p>Carefully study the source code, understand your system environment, and configure the domain names contained in video-config.php<\/p>\n\n<p>2.\nCreate a database and table named \"videos,\" which is used to store individual video meta information.\nThe sql script file is server\/setup\/videos-table.txt.\nEvery video corresponds to one row in the table.<\/p>\n\n<p>Note that version 1.0 has altered the videos table structure. \nIf you are upgrading from version 0.9, please add the missing columns, \nthen run server\/utilities\/video-backfill-files.php to backfill the new columns. Otherwise your existing videos won't play.<\/p>\n\n<p>3.\nSet up a dedicated transcoder server with Linux\/Unix operation system.\nYou'll need to first install the whole WPMU package and this plugin code because the transcoder uses general blog functions as well.\nIn addition, follow server\/setup\/transcoder-setup.txt to install the transcoding utilities.\nOnce the entire transcoding utilities are installed, go to server\/setup directory and run the following command to verify the installation:<\/p>\n\n<p>php video-verify-ffmpeg.php<\/p>\n\n<p>The above command downloads a sample video, and tries to use the ffmpeg you just installed to transcode it.\nIf it can successfully transcode the video, it prints out the message \"Congratulations! ffmpeg is installed correctly.\"<\/p>\n\n<p>If you see an error message, make sure the transcoder is installed successfully.\nThe transcoder is the heart of any video system, and it must work correctly.<\/p>\n\n<p>Version 1.0 and later supports theora\/ogg, so you need ffmpeg1theora. \nFollow instructions on http:\/\/v2v.cc\/~j\/ffmpeg2theora\/install64.html \nto install ffmpeg2theora to \/usr\/local\/bin\/ffmpeg2theora<\/p>\n\n<p>4.\nDetermine your file serving infrastructure and file serving URL schemes.\nSet up your system environments. One URL serving sample is described in the extra note section.<\/p>\n\n<p>Note in version 1.0 and beyond, you don't really need to worry about the URL structure. \nOnce you configure parameters in video-config.php, everything will work correctly.<\/p>\n\n<p>5.\nTesting and customization<\/p>\n\n<p>The video player source code is also released. The player is written in actionscript 3 using Adobe Flash CS3. \nThe source code is located at directory player\/ and you don't need to deploy it to your servers. \nRefer to player\/readme.txt for more details.<\/p>\n\n<p>The software contained in this package is under GNU GENERAL PUBLIC LICENSE.\nhttp:\/\/www.gnu.org\/copyleft\/gpl.html<\/p>\n\n<!--section=faq-->\n<h4>Why does this plugin seem so complex ?<\/h4>\n\n<p>It is not a \"regular\" plugin. It's a complete video solutions framework,\nwhich handles video upload, transcoding, serving and video player.\nIf you just use WordPress for your own personal blog, this is not for you.\nIt's designed for <em>large scale WordPress MU systems<\/em> which host at least thousands of blogs.<\/p>\n\n<p>Meanwhile, it's easy to adapt this plugin to be used on single server installation,\ncombining Web server, admin Web server and transcoder into a single server.<\/p>\n\n<p>This plugin can also be used as the foundation for a video startup company.<\/p>\n\n<!--section=screenshots-->\n<ol class='screenshots'>\n\t<li>\n\t\t<img class='screenshot' src='screenshot-1.png' alt='wordpresscom-video-server screenshot 1' \/>\n\t\t<p>This screenshot description corresponds to video architecture screenshot-1.png<\/p>\n\t<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<p>version 1.0  (Sep 2009)<\/p>\n\n<ol>\n<li><p>restructured videos table to accomdate theora\/ogg and added new columns std_files, dvd_files, hd_files, etc to make file dependencies more explicit.\nIf you have a working previous version, and have live videos to serve, you must run video-backfill-files.php to update your table.<\/p><\/li>\n<li><p>support media rss in feed<\/p><\/li>\n<li><p>support many other features such as ratings, dynamic thumbnail capture feature in admin panel<\/p><\/li>\n<li><p>support open video<\/p><\/li>\n<li><p>simplified the setup requirement dramatically<\/p><\/li>\n<li><p>fixed a few bugs reported by community members<\/p><\/li>\n<\/ol>\n\n<p>version 0.9 (July 2009)<\/p>\n\n<ol>\n<li>first released version.<\/li>\n<\/ol>\n\n<!--section=other_notes-->\n<h3>URL Structure<\/h3>\n<p>Sample Video URL Structure \nNote that in version 1.0 and beyond, by default you don't need to modify any .htaccess. \nHowever, if you want to have shorter and more concise URL structure, you can follow the example below.<\/p>\n\n<p>Suppose a user uploads a video, which is transcoded and processed successfully by the video system\nInternally, the video is assigned the guid: hFr8Nyar. The internal shortcode produced is [wpvideo hFr8Nyar].<\/p>\n\n<p>Before the video is displayed on a WordPress blog, the parsing function in video.php converts the shortcode into the following embed code:<\/p>\n\n<pre><code><a href=\"http:\/\/v.mydomain.com\/hFr8Nyar\">http:\/\/v.mydomain.com\/hFr8Nyar<\/a>\n<\/code><\/pre>\n\n<p>In the above example, \n    v.mydomain.com\/hFr8Nyar\nis rewritten to \n    v.mydomain.com\/wp-content\/plugins\/video\/flvplayer.swf?guid=f6n7RD5B\nby the following rewrite rule defined in .htaccess:<\/p>\n\n<pre><code>RewriteCond %{HTTP_HOST} ^v\\.mydomain\\.com\nRewriteCond %{REQUEST_URI} !\/videofile\/\nRewriteCond %{REQUEST_URI} !\/wp-content\/\nRewriteRule ^([^\/]+) \/wp-content\/plugins\/video\/flvplayer.swf?guid=$1&amp;video_info_path=http:\/\/v.mydomain.com\/wp-content\/plugins\/video\/video-xml.php [L,R=302]\n<\/code><\/pre>\n\n<p>Once the player (flvplayer.swf) is loaded, it receives the video guid, and path to obtain video XML information. \nthen the flash player queries video-xml.php to retrieve all the relevant information about a video, \nincluding different formats, thumbnail images, duration, and other meta information.<\/p>\n\n<p>For example, for the above guid hFr8Nyar, the video player queries and obtains the following xml data.<\/p>\n\n<p>Here's a link to <a href=\"http:\/\/v.wordpress.com\/wp-content\/plugins\/video\/video-xml.php?guid=hFr8Nyar\" title=\"video xml information\">video xml information for guid hFr8Nyar<\/a><\/p>\n\n<p>The player then intelligently loads the most suitable video files and plays the video.\nFor example, if the player checks the embed width and height, and decides that it is best to fetch and play the smaller version, \nit will use the fmt_std section of the xml file and request the corresponding movie file and original thumbnail images.<\/p>\n\n<p>As you can see in this example, the video files URL structure has the following format:\nblog_domain.videos.mydomain\/guid\/format<\/p>\n\n<p>The important thing is to use a consistent structure and you can serve the files accordingly.<\/p>\n\n<p>On the system side, you need to make sure you can serve the video files according to the URL structure.<\/p>\n\n<p>The following rules are configured in .htaccess for this purpose:<\/p>\n\n<pre><code>RewriteCond %{REQUEST_URI} ^\/$\nRewriteCond %{HTTP_HOST} ^(.+)\\.videos\\.mydomain\\.com\nRewriteRule (.*) http:\/\/%1.mydomain.com\/ [R,L]\n\nRewriteCond %{HTTP_HOST} ^(.+)\\.videos\\.mydomain\\.com\nRewriteCond %{REQUEST_URI} !blogs.php\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteRule ^([^\/]+)\/(.*)\/(.*)$  \/wp-content\/blogs.php?video_guid=$1&amp;type=$2&amp;format=$3 [L]\n<\/code><\/pre>\n\n<p>In the above, the video is served by \/wp-content\/blogs.php. This is a purely system-specific example. \nYou will need to determine how you will serve your videos, either from your own local data server or using CDN.<\/p>","raw_excerpt":"Note that as of Sep, 17, 2009, this plugin has been migrated to WordPress Code:","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/58959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=58959"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hailin"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=58959"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=58959"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=58959"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=58959"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=58959"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=58959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}