コンテンツつまみぐい

もぐもぐもぐもぐ

WEBプログラミング出来ない俺がHFS ~ HTTP File Serverで自宅PCの動画と音楽をストリーミング再生?できるようにした

Windowsで簡単にファイルサーバに特化したHTTPサーバを立ち上げるためのソフトHFS ~ HTTP File Serverで、動画ファイルと音楽ファイルをストリーミング再生できるようにテンプレートを編集した。

 

窓の杜 - 【REVIEW】Webブラウザーでアクセスできるファイルサーバーを手軽に構築「HFS」

 

Apacheとかで自鯖立てるのめんどくせーって人におすすめ。

 

経緯

DJとか外出先で、自宅PCのHDD内に入っている曲がいくつか欲しい!って状況になった時用に、HFSでDLできるようにしていた。

しかし、曲を再生する為にはDLを完了させる必要があるので、ちょっとだけ聴きたい(DJで使用するためにイントロと間奏の拍だけ確認したい時等)に面倒だった。

先日HTML5で追加されたというaudioタグとvideoタグの存在を知った。

 

1. HFSのテンプレートを編集する

f:id:arisane:20160202010328p:plain

Expert modeに変更し、MenuからHTML templateを選択する。

 

2. Templateを編集する

2-1.  videoタグとaudioタグで囲っただけのページを出力するjavascriptを追加する
  1. <head>
  2.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  3.     <title>{.!HFS.} %folder%</title>
  4.     <link rel="stylesheet" href="/?mode=section&id=style.css" type="text/css">
  5.     <script type="text/javascript" src="/?mode=jquery"></script>
  6.     <link rel="shortcut icon" href="/favicon.ico">
  7.     <style class='trash-me
  8.     .onlyscript, button[onclick] { display:none; }
  9.     </style>
  10.     <script>
  11.     // this object will store some %symbols% in the javascript space, so that libs can read them
  12.     HFS = { folder:'{.js encode|%folder%.}', number:%number%, paged:{.!option.paged.} };
  13.     </script>
  14.     <script type="text/javascript" src="/?mode=section&id=lib.js"></script>
  15.     <script language="javascript" type="text/javascript">
  16.     function hogeMusic(url) {
  17.         var obj = window.open();
  18.         obj.document.open();
  19.         obj.document.write("<html><body><audio src=");
  20.         obj.document.write(url);
  21.         obj.document.write(" controls>Music</audio></body></html>");
  22.         obj.document.close();
  23.     }
  24.     function hogeVideo(url) {
  25.         var obj = window.open();
  26.         obj.document.open();
  27.         obj.document.write("<html><body><video src=");
  28.         obj.document.write(url);
  29.         obj.document.write(" controls>Music</video></body></html>");
  30.         obj.document.close();
  31.     }
  32.     </script>
  33. </head>

function名とか適当

 

2-2. カラムを追加
  1. [list]
  2. <div id='files_outer'>
  3.     <div style='height:1.6em;'></div> {.comment| this is quite ugly, i know, but if i use any vertical padding with height:100% i'll get a scrollbar .}
  4.     {.if not| %number% |{: <div style='font-size:200%; padding:1em;'>{.!No {.if|{.length|{.?search.}.}|results|files.}.}</div> :}|{:
  5.         <form method='post'>
  6.             <table id='files'>
  7.             {.set|sortlink| {:<a href="{.trim|
  8.                     {.get|url|sort=$1| {.if| {.{.?sort.} = $1.} | rev={.not|{.?rev.} .} /if.} /get.}
  9.                 /trim.}">{.!$2.}{.if| {.{.?sort.} = $1.} | &{.if|{.?rev.}|u|d.}arr;.}</a>:} .}
  10.             <th>{.^sortlink|n|Name.}{.^sortlink|e|.extension.}
  11.             <th>Music
  12.             <th>Video
  13.             <th>{.^sortlink|s|Size.}
  14.             <th>{.^sortlink|t|Timestamp.}
  15.             <!--th>{.^sortlink|d|Hits.} -->
  16.             %list%
  17.             </table>
  18.         </form>
  19.     :}.}
  20. </div>

 MusicとVideo再生用ボタンを表示するので追加しとく

 

2-3. AUDIOタグ、VIDEOタグのページを呼び出すボタンを追加
  1. [file=folder=link|private]
  2.     <tr class='{.if|{.mod|{.count|row.}|2.}|even.}'><td>
  3.         <input type='checkbox' class='selector' name='selection' value="%item-url%" {.if not|{.or|{.get|can delete.}|{.get|can access.}|{.get|can archive item.}.}|disabled='disabled'.} />
  4.         {.if|{.get|is new.}|<span class='flag'>&nbsp;NEW&nbsp;</span>.}
  5.         {.if not|{.get|can access.}|<img src='/~img_lock'>.}
  6.         <a href="%item-url%"><img src="%item-icon%"> %item-name%</a>
  7.         {.if| {.length|{.?search.}.} |{:{.123 if 2|<div class='item-folder'>{.!item folder.} |{.breadcrumbs|{:<a href="%bread-url%">%bread-name%/</a>:}|from={.count substring|/|%folder%.}/breadcrumbs.}|</div>.}:} .}
  8.         {.123 if 2|<div class='comment'>|{.commentNL|%item-comment%.}|</div>.}
  9.         <td><input id="Submit1" type="button" value="Music" onclick="return hogeMusic(&quot;%item-url%&quot;)" />
  10.         <td><input id="Submit2" type="button" value="Video" onclick="return hogeVideo(&quot;%item-url%&quot;)" />

このボタンを押すと2-1のscriptが呼ばれる。

 

以上

 

イメージ

f:id:arisane:20160202013654p:plain

 Musicボタンを押すとプレイヤーが表示される

f:id:arisane:20160202013751p:plain

ファイル別に判定するのが面倒なので、一律このボタンが出てしまうがそこは運用でカバーということで。

動画ファイルに対しては下記の用な感じで再生可能

f:id:arisane:20160202014026p:plain

 下にちっちゃくvideoタグのコントロールバーが出てる。