Social Streaming

    Use an existing social graph (Twitter, Facebook, Last.fm) to:

    • Passively observe what your friends are doing with Songbird
    • Discover/purchase/stream new music directly from friends

    Example:

    notification-small.jpg

     

    Initial Tasks

    Proof of Concept


    Presence and Messaging

    •  Set up ejabberd server (stevel)
    •  Manually create some accounts to start (mattc)
    •  Songbird extension to demonstrate presence and messaging (mattc)
    •  Basic service pane integration for buddy list (mattc)
    •  Display incoming messages via Growl(mattc)
      • nsIAlertsService gets us a cheap/easy way to do this with Growl on Mac, and systray popup on Windows (not sure about Linux though?)
        • Windows = xul pop up window, we should look at integrating SNARL as optional (also GROWL for windows).
        • Linux = xul pop up window, we should look at libnotify.
        • OS X = Growl, or fail :( we should have a back up for this if GROWL is not installed, the xul pop up like windows/linux does not work on OS X due to a bug when resizing the window (ends up scrolling off the screen), so using a fade in window like GROWL may be better.


    Activity

    • Set up Laconica server (stevel)
    • Manually create some accounts to start (stevel)
    • Songbird extension to authenticate and push messages (mattc)


    Streaming

    • Ability to consume UDP streams with gstreamer (mikes)
    • Ability to send stream with gstreamer or VLC (mikes)
    • Manual test (mikes)
    • XMPP listener to initiate streaming
    • Protocol handler to initiate remote stream using XMPP

    - OR -

    • For now, just drop in the jshttp server and have it stream all files (mook)


    Integration

    • Hook rating event to push via XMPP and Laconica(mattc)
      • Might be able to hook the METADATA_CHANGE MediacoreEvent
      • Maybe not - looks like it's only hooked up to the GStreamer media core for media-core level metadata changes, but we should add some event dispatches for events like rating-change into the bird.  Would be useful in general.
    • Make rated track notifications into links that initiate playback

     

    Actually Somewhat Usable

    • Come up with a reasonable API for pushing notifications (mattc) (still kinda crappy)
    • Push notifications for additional events such as library adds, downloads, add-on installs, etc. (stevel)
    • Style laconica a bit (mattc)
    • Set up libpjnath for UDP hole punching
      •  Looking at allpeers code for UPnP and possibly integrating it into ours.
         

    Open for Alpha Testers

    • Web service for adding a new user. Must prove ownership of an existing account and then import personicon, friends, etc. (mattc)
    • Hook up email notification
    • Add basic invite UI

     

    More Functionality

    • Hook up comments, and comment notification
    • Add search support


    Proposal for notifications

    The kitchen sink - need to prioritize. Is the webapp the only place a log of notifications can be displayed? What happens when the user clicks on the growl notification for each of the following? Need string for each notification for webapp and growl.
    • play track - $friend listened to $track by $artist
    • rate track - $friend rated $track by $artist with $star stars
    • share track
    • share album
    • share playlist
    • share artist
    • share URL
    • friend added friend - $friend is now friends with $friend
    • someone added you as a friend - $friend has added you as a friend
    • message received from friend
    • friend updated status
    • added track - string needs to be smart about what was added
    • downloaded track
    • purchased track
    • created playlist - when is a playlist created?
    • edited playlist
    • add-on installed - $friend installed $addon to $app
    • application updated - $friend updated to $app $version

    Should notifications prompt for other actions? e.g.
    • play track -> $friend listened to $track by $artist (listen to $track, search for more music by $artist, listen to all tracks by $artist in your friends' collective libraries) ?
      • Maybe if you have $friend listened to $track by $artist and the $friend is online then
        • $friend links to the friend's profile page that includes an option to view their activities and library
        • $track links to the track in the friend's library + autoplay?
        • $artist links to a filtered view of the friend's library that shows albums and tracks for the given artist
      • One thing to consider here is that Growl notifications can't have multiple click behaviors. (right?) The flow would be that you click on the notification which focuses Songbird and then shows a page that displays the notification message with the links.

    This might be too much detail at this point but the system should to be able to take raw activity logs and aggregate them into meaningful messages for notifications to be not-so-annoying and more useful. I think we can decide how much smartness is needed later though. Eg:
    • "$friend added $track1, $friend added $track2, $friend added $track3" is not as useful as "$friend added 3 tracks" which is not as useful as "$friend added 3 tracks from $album" or something


    Proposal for sharing

    The kitchen sink - need to prioritize. Drag and drop on friend or contextual menu item? Having support to share with people friends who don't have Songbird will help increase the user base.
    • track
    • album
    • playlist
    • artist
    • URL
    • add-on

    I think we should look first at just playlist sharing, so the user should be able to select what playlists they wish to share with friends and then we can display that in the service pane.

    Service pane:
     > Friends
          > DJFail
              Happy
              Kick Butt
              Sad
          > Meteor Joe
              End of the World
              Disaster diverted

    Clicking on a playlist under a friend would download the list (from server?) and display it in the media pane, should we hide playlists for friends that are not online, or should we hide friends not online or display both either way?. We could then do things like show tracks the user has and they can play them, or display a link to tracks they can buy, then in the future we could allow them to stream them if the friend is online.


    Restrictions

    The purpose of this add-on is to discover and ultimately purchase new music. Here are some guidelines to keep in mind:

    • This needs to be a service for people who are friends in real life. Music streaming needs to be between friends, and not a public performance.
      • Importing from Facebook, or imposing a two way request-accept model is key.
      • There also needs to be a reasonable limit on the number of people on your friends list. Say 20-50 at most.
    • This is not on demand streaming of anything in a library. The idea is that after a notification event (track rating, playback, etc.) an associated stream would be available to friends for some limited period (from one hour to one day at most).


    Tag page
    • No tags
    FileSizeDateAttached by 
     1-home.jpg
    No description
    129.12 kB14:20, 16 Mar 2009mattActions
     2-hub.jpg
    No description
    132.01 kB14:20, 16 Mar 2009mattActions
     3-commenting.jpg
    No description
    129.37 kB14:20, 16 Mar 2009mattActions
     4-profile.jpg
    No description
    150.29 kB14:20, 16 Mar 2009mattActions
     5-playlist.jpg
    No description
    109.86 kB14:20, 16 Mar 2009mattActions
     6-library.jpg
    No description
    147.55 kB14:20, 16 Mar 2009mattActions
     notification-small.jpg
    No description
    47.04 kB12:16, 23 Mar 2009mattActions
    Viewing 15 of 16 comments: view all
    HOLY CRAP! those mockups are ooo sooo sweet! nice!
    Posted 16:45, 16 Mar 2009
    HOLY CRAP, people read the wiki!? :)

    If you are interested in working on this let us know. We're just getting started, and haven't even set up a repository yet.
    Posted 17:58, 16 Mar 2009
    I'll see if I can help on this.
    I was actually more or less done with my implementation of a songbird user account and I was trying to change the DAAP protocol to work with user-based permissions. So you could allow friends to only see certain playlists, or see the music, but not stream it, etc. Without losing compatability with other DAAP clients/servers.

    I can probably use some of that here.
    Posted 03:45, 17 Mar 2009
    Cool. Is this code posted somewhere?
    Posted 11:17, 17 Mar 2009
    Absolutely stunning...Then rename this to Social Media Player. Instead of just Web Player :)
    Posted 03:39, 20 Mar 2009
    I don't have the code online, but I'll see if I find some time this weekend to clean it up and upload it somewhere. What would be a good place to do that?
    Posted 08:46, 20 Mar 2009
    For the notifications there is an add on called Notify Me which uses Growl, Snarl, and libnotify (OSX, Window, Linux) and nsIAlertsService as a back up if any of those are not available. I suggest we re-implement the nsIAlertsService into a useable service with those three plus a fail back xul alert service that actually works on os x (don't use the window sizing thing that craps out on OS X). I have done work on this a bit for the add on so I would totally help out on that. Callbacks can be handled with a "cookie" so when they click the notification we can focus songbird and then what ever we want.
    Posted 16:22, 23 Mar 2009
    Checkout http://www.playdar.org - we already have some of this working, and share common goals. edited 10:40, 24 Mar 2009
    Posted 10:40, 24 Mar 2009
    stevo: nice. we could add that as an option, but I think for now we want to do notifications within the display pane, since they aren't really system wide "look at me" events.

    RJ: playdar is awesome, and there is definitely room for integration. I'll drop by in IRC.
    Posted 10:34, 25 Mar 2009
    Matt, I just saw the prototype. Is there a way to contribute code?
    Posted 11:25, 6 Apr 2009
    XPI is at http://whacked.net/scratch/murmuration.xpi
    You'll also need the xmpp4moz XPI @ http://whacked.net/scratch/xmpp4moz.xpi
    Posted 09:29, 14 Apr 2009
    FOR LINUX


    We have the libnotify library, so notifications will come from there. Also, on Ubuntu 9.04 we have a OSD like notification system

    Read this: https://wiki.ubuntu.com/NotificationDevelopmentGuidelines
    and this (as example for C) https://wiki.ubuntu.com/NotificationDevelopmentGuidelines?action=AttachFile&do=view&target=icon-summary-body.c

    I could help if I knew how to start it on C
    Posted 15:22, 20 May 2009
    Murmuration is using nsIAlertService... currently Linux XULRunner builds don't support libnotify, once they do - this will work "for free"
    Posted 15:49, 20 May 2009
    I posted some mockups and ideas on Getsatisfaction for listening history pages in Songbird, and they might be helpful to those working on this add-on: http://getsatisfaction.com/songbird/topics/a_listening_history_page_with_better_integration_and_more_information_than_last_fm
    Posted 09:04, 22 May 2009
    is this project dead... i would love to work on this :)
    Posted 19:08, 11 Jun 2011
    Viewing 15 of 16 comments: view all
    You must login to post a comment.
    Powered by MindTouch Core
    Real Time Web Analytics