[mythtv-users] PATCH: enable mythweb streaming via .asx

Rich West Rich.West at wesmo.com
Mon Nov 6 17:12:55 UTC 2006


This is modeled slightly after the TivoWebPlus functionality (for the
Tivo, obviously. :) ) where a small .asx file is generated and
downloaded to the client.  When that file is opened (usually
automatically), the respective player (Windows Media Player, mplayer,
totem, etc) reads the contents of the .asx file, and accesses the media
directly (as defined in the .asx file, which, in this case, is the
direct URL to the media file).  The client then buffers and plays the
media as it is being downloaded.

The current handler.pl implementation did not allow for this
functionality as it required the entire mpg to be downloaded to the
client before the client would act upon it.

I started writing it thinking that this was a Windows-only solution, but
I quickly discovered that both totem (on FC5) and my mplayer on FC5
understood the contents of the .asx file and did the right thing. :)

-Rich


--- /var/www/html/mythweb/modules/stream/handler.pl  2006-11-06
12:03:37.000000000 -0500
+++ /var/www/html/mythweb/modules/stream/handler.pl.patch    2006-11-06
12:02:33.000000000 -0500
@@ -7,6 +7,53 @@
 # @author    $Author: xris $
 #
 
+##
+# Create the small .asx file based upon the information that we have for
+# this particular piece of media.  .ASX files are pretty simplistic and are
+# truly made for this purpose.
+#
+# The benefit is that the client has the ability to view/play the
downloaded
+# content as it is being downloaded, rather than waiting until the
completion
+# of the entire download.
+#
+# While it was originally geared towards Windows, it was discovered that
+# Linux clients understand .asx files and can act upon them in the same
way.
+##
+sub generate_asx
+{
+   my ($title, $subtitle, $filename) = @_;
+   my ($file) = "";
+
+   $file = "<ASX version = \"3.0\">
+<TITLE>$title</TITLE>
+    <ENTRY>
+    <TITLE>$title - $subtitle</TITLE>
+    <AUTHOR>MythTV - MythWeb</AUTHOR>
+    <COPYRIGHT>GPL</COPYRIGHT>
+        <REF HREF =
+\"http://" . $ENV{'HTTP_HOST'} . "/mythweb/" . $filename . "\" />
+    </ENTRY>
+</ASX>\n";
+   return ($file)
+}
+
+##
+# Here we simply send the small asx file to the client and exit quietly.
+##
+sub send_asx
+{
+   my ($title, $subtitle, $filename) = @_;
+   my ($file) = &generate_asx($title, $subtitle, $filename);
+   print header(-type                => 'text/html',
+                -Content_length      => length($file),
+                -Content_disposition => " attachment;
filename=\"$title.asx\"",
+                );
+   print $file;
+   exit;
+}
+
+
+
 # Necessary constants for sysopen
     use Fcntl;
 
@@ -45,6 +92,12 @@
         exit;
     }
 
+&send_asx($title, $subtitle, $filename);
+
+#-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-#
+#-#-#-##   We don't utilize any of the code past this point.  ##-#-#-#
+#-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-##-#-#-#
+
 # File size
     my $size = -s $filename;
 



More information about the mythtv-users mailing list