IDEA #40 cont’d – Primary Functionality Specifications


This is part 3 of 5 additional posts to the original idea.

This was a specifications document to hand over to a programmer, to get a price quote on developing this functionality (which I felt was minimal and necessary for launch).

Last modified in April 2006:

Technical Requirements:

  • Develop in PHP and MySQL on Linux server.

  1. Video-to-Video conversion – We have the conversion script developed already (#1), but not any of the a,b,c,etc. I’m providing description to you, so that you are aware of the functionality. We are looking to take any video (3g2, AVI, MPG, MP4, MOV, etc) and convert to these various formats (the original, 3gp, 3g2, MP4, FLV), thus allowing someone to send a video by email (or file upload) and convert to 3g2/3gp for playback on their cell phone; or convert to FLV for playback in flash video; or MP4 for download to their iTunes or iPod. Also extract the Audio from uploaded videos and save as MP3 (which will allow users to use it as a ringtone). [That is the end of the functionality that is written. We need everything following this sentence]

    1. There will be a “watermark” in the lower-left corner of every video that will be our logo.

      1. Keep the original video file as is.

      2. “Watermark” all the other video formats upon conversion.

    2. All of these files will be saved in a directory hierarchy such as: /year/month/day/

    3. FLASH VIDEO – The primary playback format will be FLV. The FLV version will display on our website.

      1. You will develop a Flash Video Player that will be the player for videos on our website.

        1. The Flash Video Player will have the following functionality:

          1. It will integrate with the MySQL database.

            1. Videos can be associated to other videos – meaning, a video can have a parent video, or children videos.

              1. The far-right side of the video (30 pixels wide; 100% high) will be a “layer” that says “Video Replies”

                1. When user clicks that, this layer will shift into view on top of the video being viewed at the moment. This will have a hierarchy of screenshots from all the video replies to this video (and if this was a reply to another video, it will show the videos previous in this video chain).

                2. VIDEO CHAINLETTER COMMENTARY – a specific email address and URL will exist for every video, which other videos can then specifically be “attached” to as comments. Thus you could then email another video to this specific email address (i.e., which would then associate their video to play at the end of the video they just watched) or you could click on the video itself and go to a specific URL on our site that the user then uploads a video comment, that is then added to that video’s playlist. [NOTE: We have written the email parsing script, but you will need to implement it into the grand scheme.] SO, OUR FLASH VIDEO PLAYER on the website will be different than the Flash Video Player we have people embed on their own websites/blogs/myspace. The FLV player for both will do the following: Show the default thumbnail (as initially defined by the uploader; but over time we will track which thumbnail generates most click-throughs); our watermarked logo; play button (similar to YouTube’s player — big in middle, and small at bottom of video); make a column in far-right space that shows thumbnails of “video comment replies” (heading “Replies”) — have one of the thumbnails read “Submit a video reply”; at bottom of video display the email address and URL where the user can send in their ‘video comment reply’ to that video – “What do you have to say?”. (Somehow we want to distinguish the first video in the “chain”, and allow the user to post a video reply to the original, or to the current one they are viewing. That way someone could comment on the topic overall from the first video, or they can comment on someone else’s comment. So we might have a link on a sub-video that says, “This is a reply to another video. If you want to post a reply to the original video, Click here.”) At end of a video, display 3-second branding clip that tells the user they can submit their own video comment reply to that video by sending the video by email to the following address, or clicking the supplied specific URL. Then it rolls to the next comment for that video chain letter (but as the new video comment is playing, the user can still see how to reply to the previous video comment). Somehow users need to be able to see the “organizational chart” of the video they are watching and how many replies there are, and replies to replies, etc. What determines whether someone continues seeing replies to one video, but then a reply to one of those replies is found — does it go onto the reply of that reply, or continue showing the replies to the main video they had watched?

            2. Videos can be downloaded by users, modified, uploaded, and associated to the original video as being a “videomod”. This allows users to give their own interpretation on someone else’s video by cropping it, or inserting other clips/visuals/audio into the original, etc. People can get creative. ( see )

          2. Play/Pause (they exist on same button)

          3. Play Again (text on button says ‘play again’; brings user to beginning of video)

          4. Rewind (single arrow; starts rewinding; if user clicks it again, it is faster; if user clicks it again, it is even faster; if user clicks it again, it goes back to the slow rewind setting. Meanwhile, the ‘play’ button is active with the ‘play’ forward-arrow displaying).

          5. Share (if the user is logged in, then their friends list appears and they can highlight friends that they think should see this; and/or there are 5 boxes for email addresses; and a textarea box for inputting a quick message to friends)

          6. Video or Text Reply?

          7. progress bar at bottom to show download progress and playing progress

          8. audio on/off icon

          9. Rate (on far-right side will be 5 stars, which are varying sizes with the biggest being at top of screen and then descending to a smaller star. The user can click on any of those 5 stars, which will automatically register as their rating of that video. If the user clicks a different star, then it reregisters the new click as their rating for that video.

            1. There will be a flag icon, which the user can click, and that will open a layer with options including: “Not related to the original video or Miscategorized”, “Inappropriate Content”, or “Possible Copyright Violation”.

              1. If the user chooses “Possible Copyright Violation”, a textbox appears that says “If you work for a Law Agency, or represent or own the copyright possibly being infringed, please provide the company you work for and your email address”. There will also be a textbox that
                says “Please describe the possible copyright violation. The more detailed you are, the more helpful.”

              2. If the user chooses “Miscategorized”, our hierarchy of video categories appears and allows the user to “Suggest new category for this video”

            2. There will also be a comments icon, which the user can click, and that will open a layer with a textarea box that reads above it “Provide your comments about this video here:”.

              1. It will also display on that layer the unique email address associated to that video, so the user can quickly record a video reply and email it (by cell or web)

              2. It will also display a file box (that says “Upload Video Reply Now”) if the user wants to directly upload a video reply right now. If they click the ‘Browse…’ button, then a pop-up will allow them to browse their own computer for their video reply.

        2. Once a video plays, if there is a video reply, it will automatically play the reply (or randomly play one of the replies if there are multiple replies to the same video).

      2. A 3-second branding clip will play before the video.

    4. Users can send videos or photos the following ways:

      1. Email – from cell phone

        1. We have written the preliminary code for this.

      2. Email – from email client

        1. We have written the preliminary code for this.

      3. Webpage – using our upload java applet.


    1. VIDEO UPLOAD VIA WEBSITE – FILE UPLOAD VIA JAVA APPLET ON WEBPAGE – Users upload their video using a Java Applet — U-Upload Pro: , here is the documentation on this applet: , see 5.1 for advanced file filtering — we will only accept video files to be uploaded (*.avi,*.mpg,*.mpeg,*.mov,*.dvr-ms,*.mpe,*.mp4,*.asx,*.asf,*.wmv,*.3g2,*.3gp,*.divx, *.m4v), also somehow you will have to tie each video to a user account so that videos uploaded by a user are associated to their account; this Applet allows someone to upload an individual file or an entire folder. (It looks as though there is little security in the uploading of videos to our FTP server, as the FTP login/password is minimally encrypted and placed in the HTML sourcecode — therefore, please ensure that once a video is uploaded, that there is no way for someone to just post a link to that video — ensure that once a file is uploaded it is not available via a public FTP or HTTP address. Also, if someone connects to the FTP not from our Applet, then somehow delete those videos immediately or deny them; not sure if you can deny them, but definitely scan the folder to ensure each file is associated with someone’s website username and if not then delete it. Do not allow download access to the FTP folder that these files go into temporarily during the upload.)

      1. We will purchase this software and supply.

      2. The user should also be able to upload photos – GIF, JPG, PNG, BMP, TIF.

    2. THUMBNAILS – We don’t have to use MPLAYER, but it seems to make sense. USING MPLAYER TO EXTRACT IMAGES FROM VIDEO – A 100x100px JPG thumbnail is created of each video and stored (see 5.2 of How this will work is once a user uploads a video, our server automatically encodes the video and pulls out at least 5 thumbnail images minimum or a thumbnail image every 15-seconds if the video is less than 5 minutes, otherwise a thumbnail image every 30-seconds if the video is greater than 5 minutes. It also pulls a thumbnail from the beginning and end of the video. (Really, we want to show the user as many thumbnails as possible and just have them select 5 of them as the best that they think). Use AJAX so that as they select thumbnails, they are updated on our server immediately and no refresh needed. The user that uploaded the video is then presented with all of these thumbnail images and selects up to 5 images as the “images to associate with your video”. After they choose 5, the next screen shows those 5 images and asks the user to choose one as THE default one. Delete the remaining thumbnails other than the (up to) 5 that they chose.

      1. If user is uploading multiple videos at once, repeat this process (allow them to upload all their videos at once, then display thumbnails of the first clip, they select 5, then a default, then show thumbnails of the next clip, etc). If the user drops out of the process after uploading videos, then store the video(s) for up to 3 days, send an email to them 2 hours later saying that we have videos that they uploaded which still need to have thumbnails associated to them to complete the video upload process. CRON JOB – queue of videos for each user.

      2. The user then is presented with a form that allows the person to invite others to view their video (10 rows of 3 columns – first name, last name, email address, with one message box for all – see ).

    3. MODIFICATION TO THEIR UPLOADED VIDEO – If the video upload user wants to make their video a little less stagnant, they can choose background music from our library of loops – or upload their own. The user can then preview their video with this background music and have the option to lower or increase the volume of the background music.

      1. We will then loop that background music throughout their clip, with a 3-second fade-in and 3-second fade-out of the loop.

      2. Will need to supply with these music loops, but assume they are in MP3 or WAV format – which one will increase performance on the server?

  3. USER REGISTRATION / LOGIN / EMAIL&CELL VERIFICATION – Users setup a simple account (username, email address, AOL IM screenname, YAHOO IM screenname, ICQ IM number, MSN IM screenname, GOOGLE TALK screenname, first name, last name, cell phone email address, password, date of birth, country, city, state, zip, default photo, default video). [Use city/state drop-down from either or Google AdWords] [For cell phone, they can just select their carrier (T-Mobile, Verizon, etc) and input their cell #, and then we generate their cell email address] [ii. T-Mobile: Virgin Mobile: Cingular: Sprint: Nextel: Verizon text: Verizon photos/video: (Verizon customer may have to sign-up first: ) ] [Have user input cell phone number twice, email address twice, and password twice] [Email sent to user’s cell phone with unique code, which they input on our website while
    logged in, to confirm their cell phone is theirs. Also send an email to their actual email address to confirm their account. Store in DB whether they confirmed account.] [Default photo — the user can upload one photo for now to show who they are]

    1. VERIFY/CONFIRM CELL PHONE TO ONLINE ACCOUNT – Users able to verify/confirm their cell phone with their account. (If the user doesn’t have an account with us and sends a video to our video email address, then we reply to their cell phone with an email that contains a unique confirmation code. On our website, they input that confirmation code and finish sign-up.) WE WILL PARSE THIS EMAIL WITH OUR EMAIL PARSING SCRIPT. If user never comes to our website to create account, delete after 8 days (we’ll send reminder after 24 hours, then 72 hours, then 1 week). (If the user HAS an account with us, then we need to verify their cell phone, therefore upon sign-up, we send an email to their cell phone’s email address with a unique confirmation code. The user can be logged into the website and input that code, then they have verified their cell phone with their account; or if they aren’t logged in, they input the confirmation code on our homepage, then they are asked on the next page for their username/password to login.)

    2. LOGIN – Users are able to click ‘forgot password’ link to retrieve password to their email address.

  4. *SEARCH AND TAGGING – All videos, photos, and users can have “tags” associated with them (basically keywords, so that people can do searches and find videos or photos related to certain keywords).

    1. A search box will exist on the website and allow a user to search for videos, photos, or users matching the query. If a user is in a video category, then they can choose to search all videos or just videos in that category. An advanced search page allows a user to check boxes next to each search category and put keywords in, to do a search. People can search by first and/or last name, but never sees the user’s actual full names.

  5. *VIDEO CATEGORIES AND VIDEO/PHOTO ALBUMS – the user will always select a predefined video category in our system. The user can also create their own “photo albums” (or video albums), so that they can categorize things for themselves (such as by a certain event, “Becca’s birthday party” or “Trip to Disney”). See to get an idea of how to setup these albums. User can also post sub- albums.

    1. As for the main video categories on our website, this will get quite extensive. We want to have categories for all events, movies, and then on a local level for restaurants, parks, car dealerships, etc. Thus there will be a category such as ‘Movies->Action->King Kong’ or ‘Music->Rock->Bruce Springsteen’ or ‘USA->New York->Buffalo->Restaurants->Pizza->La Nova’. Similar to how eBay has their system setup when you list a product, is how we will let someone categorize their video. Most of the time however, the user will navigate to a specific category page (such as ‘Movies->Action->King Kong’) and then either click the ‘Upload Video Comment’ link (and upload video through our website) or click a unique email address link (that is tied to that specific category) or send video from their phone to that unique email address. Then the video is categorized and auto-appears. We might initially start with the free database structure provided by – I believe it is 50mb? Or 600mb?

      1. We need an admin tool to create/modify/delete these various categories.

      2. Initially, we want to also create categories for specific music artists and the concert dates they play – see for tour dates on various artists. (i.e. ‘Music->Rock->Bruce Springsteen->MA->Boston->2006->March->31->Venue Name’)

  6. *FRIENDS – Users can view other videos and profiles of the people that posted the videos, then request to add people as their friend. When someone requests to be a friend, a friend request is sent to the other user. If the user accepts it, then on both user’s profiles, there is a friends section and their profile photo appears in eachother’s friend section. If the user denies the friend request, then the requestor gets nothing back and is not added to the friend section. In the user’s account section, they can specify whether to accept all incoming friend requests, or authorize all incoming friend requests. If “accept all incoming friend requests” is chosen, then this whole scenario doesn’t occur and automatically they both show up on each other’s friend list.

    1. *NEW FRIEND VIDEOS – AOL IM – If a user has friends that have AOL IM, then when a user uploads a new video, the friends are all notified by IM of the video immediately. [NOTE: We have this IM ability written.] Also, when a user logs in to their account, there is a section that displays some random thumbnails of new videos uploaded by friends. The user can also view their friend list to see the number of new videos since they last visited their friend’s profile (as well as since they last logged in to the website).

  7. *PHOTOS – The user can upload tons of photos by email, cell phone, or the Upload Applet — then they can select one to be their default profile image; they can also categorize these photos into “photo albums” and input “tags” (keywords) relating to each photo with a title, description, and also can select friends from their friends list that are in the photo. The user has the ability to specify in their account settings whether just friends can comment on photos or whether anyone in our network can comment on their photos. Default will be anyone.

  8. *AUDIO FOR PHOTOS – Most camera cell phones these days are just that, cameras; they don’t do video. Our service allows users to send an image in, and get the same functionality from us, we give them the code to easily insert the photo in their blog, website, or Myspace profile. But we’re ultimately trying to improve communications — allow the user to communicate better through profiles/blogs/etc. Thus, if a user has just a picture (from a camera phone, or just a digital camera), the user should be able to make that more interactive by adding voice commentary to their photos. Allow someone to upload a WAV or MP3 file, and then drag-n-drop photos into a slideshow (see – they allow you to drag/drop videos into a timeline, and create a video – we want to do the same thing, allow someone to drag/drop photos or videos, and it creates a slideshow as a video file – specifically FLV. The user can specify the # of seconds to display a photo, and specify what type of fade between photos and videos – for now, just use a fade-in/fade-out). We would use Flash (Flash Video / FLV) to then display a photo (or slideshow) along with their audio commentary. Same thing as with video, there would be the ability for others to post video/slideshow/photo/audio replies.

  9. *DAILY THEMES – the daily theme works like this: On day A, they know the theme to create videos for that will appear on Day B. On Day B, they will be able to see everyone’s videos for that theme and then go through a “TV” type functionality where they don’t see the rating of the videos at all –
    not even on the following screen. They also don’t see who created the video. All they see is the video, a rating box, and a comment box. On Day C, all of the ratings for the videos are revealed.

    1. On Day C, the top 10 theme videos for that contest appear on a page where you can view all the videos for that theme. (This section might be called “Daily Themes” or “Missions” or “Tasks” or “Daily Contest”).

    2. Must be balanced and allow all videos to get votes, but as day progresses, start dwindling it down to videos that are getting the highest scores.

  10. *VIDEO RATING & “TV” – People can rate a video 0 – 5 stars. These 5 stars would be displayed as radio buttons horizontally, along with a comments field underneath and then a “Rate Video” submit button. On an actual video page, users will see the ratings.

    1. “TV” – this will be a special area of the website where the user will see a random video, then be able to rate it (same as above), but will not see the overall rating until they submit their vote. Once they rate the video, they are automatically taken to another video that is similar to the one just shown (maybe same category). (See for the ease of this interface). Once they are on the webpage for the next video, they will see a thumbnail of the video they just watched, along with the overall star rating, and links to send the video to a friend (and the other links that each video will have).

  11. *MORE INFO ON USERS – every 5 times that a user logs into our website, we ask them a simple question that relates to other information we have on them. Such as, if they previously stated in their profile that they like movies — then we might display a screen that asks, “what kinds of movies do you like?”, and list checkboxes next to ‘scary’, ‘comedy’, ‘drama’, ‘romantic comedies’, etc. Then just like our thumbnail process, we show the next screen and have them choose the genre that they like the most.

    1. *QUESTIONS TO USERS – we want to extract original video content from our users, thus we want to give them “tasks” in a sense. Based on what we know about them, ask them related questions — such as “What is your favorite pizza joint in Buffalo?” or “Did you see Brokeback Mountain; if so, what did you think?” or “Will you go see Jurassic Park IV when it comes out? Why or why not?”. We will also show recent video posts by friends, such as “Jennifer just posted a video for her favorite chinese food in Austin” or “Rick just posted a video about the movie ‘Swingers'” or “Julie just posted a video about the law firm – Crane, Poole, & Schmitt”.

      1. We need an admin tool to create these various questions and we’ll relate them to specific video categories.