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
Viewing 15 of 15 comments: view all
Very nice!
I was working on something similar myself, being: inviting friends from facebook who also have songbird and then you could stream music via DAAP. Never found the time to finish it.

This would really be a feature that could make the difference for a user to choose songbird instead of player X
Posted 14:05, 16 Mar 2009
HOLY CRAP! those mockups are ooo sooo sweet! nice!
Posted 15: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 16: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 02:45, 17 Mar 2009
Cool. Is this code posted somewhere?
Posted 10:17, 17 Mar 2009
Absolutely stunning...Then rename this to Social Media Player. Instead of just Web Player :)
Posted 02: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 07: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 15:22, 23 Mar 2009
Checkout http://www.playdar.org - we already have some of this working, and share common goals. edited 09:40, 24 Mar 2009
Posted 09: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 09:34, 25 Mar 2009
Matt, I just saw the prototype. Is there a way to contribute code?
Posted 10: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 08: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 14: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 14: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 08:04, 22 May 2009
Viewing 15 of 15 comments: view all
You must login to post a comment.