Windows Media Playerへのデータ送信
Posted: 2012年3月09日(金) 14:11
動画データをWindows Media Player(WMP)へ送信するプログラムを作成しています。
具体的には
WMPの「ファイル」→「URLを開く」で、あるURL(今回はhttp://127.0.0.1:12345/)へアクセスしたときに、このプログラムから動画データを少しずつ送信しています。
下記のコード例ではWMPへ送信するデータをファイルから読み込んでいますが、実際は別の場所から少しずつ受信するデータを少し加工し、WMPへ送信します。
このためWMPからダイレクトに”hoge.flv"を読み込むことはできないものとしてください。
また、別の場所からのデータ受信が終わらないうちでも、WMPで動画再生を始めたいため、別の場所からのデータをすべて受信し、ファイルに書き出し、それをWMPで読むということもできないものとしてください。
質問、希望
この際に42行目のWriteで「指定されたネットワーク名は利用できません。」というエラーが出てしまうのですが、何か回避策はありますか?
私の環境では i=3(4回目)のWriteでエラーとなります。そしてこのコードのように一度Breakし、もう一度for文に入ると今度はエラーとならずWMPで再生が始まります。
一応再生が始まるので良いのかもしれませんが、気持ちが悪いのでできれば一度もエラーとならずに再生するようにしたいところです。
すみませんが、教えていただけると助かります。
環境
Windows XP, Visual Studio C# 2010 Express
具体的には
WMPの「ファイル」→「URLを開く」で、あるURL(今回はhttp://127.0.0.1:12345/)へアクセスしたときに、このプログラムから動画データを少しずつ送信しています。
下記のコード例ではWMPへ送信するデータをファイルから読み込んでいますが、実際は別の場所から少しずつ受信するデータを少し加工し、WMPへ送信します。
このためWMPからダイレクトに”hoge.flv"を読み込むことはできないものとしてください。
また、別の場所からのデータ受信が終わらないうちでも、WMPで動画再生を始めたいため、別の場所からのデータをすべて受信し、ファイルに書き出し、それをWMPで読むということもできないものとしてください。
質問、希望
この際に42行目のWriteで「指定されたネットワーク名は利用できません。」というエラーが出てしまうのですが、何か回避策はありますか?
私の環境では i=3(4回目)のWriteでエラーとなります。そしてこのコードのように一度Breakし、もう一度for文に入ると今度はエラーとならずWMPで再生が始まります。
一応再生が始まるので良いのかもしれませんが、気持ちが悪いのでできれば一度もエラーとならずに再生するようにしたいところです。
すみませんが、教えていただけると助かります。
using System;
using System.IO;
using System.Net;
class Program
{
static void Main(string[] args)
{
HttpListener listener = new HttpListener();
string prefix = "http://127.0.0.1:12345/";
listener.Prefixes.Add(prefix);
listener.Start();
while (true)
{
HttpListenerContext context = listener.GetContext();
HttpListenerRequest req = context.Request;
HttpListenerResponse res = context.Response;
using (FileStream streamR = new FileStream("hoge.flv", FileMode.Open))
{
res.AppendHeader("Pragma", "no-cache");
res.AppendHeader("Cache-Control", "no-cache");
res.AppendHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT");
res.AppendHeader("Content-Disposition", "attachment; filename=" + req.RawUrl.Substring(1));
res.AppendHeader("Connection", "close");
FileInfo fi = new System.IO.FileInfo("hoge.flv");
res.ContentLength64 = fi.Length;
//res.ContentType = 設定必要?;
byte[] resBytes = new byte[100000];
int resSize = 0;
int TotalSize = 0;
for (int i = 0; TotalSize != res.ContentLength64; i++)
{
resSize = streamR.Read(resBytes, 0, resBytes.Length);
TotalSize += resSize;
try
{
res.OutputStream.Write(resBytes, 0, resSize);
}
catch (HttpListenerException ex)
{
Console.WriteLine(ex.Message);
break;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
}
}
}
try
{
res.Close();
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
}
}
}
}
Windows XP, Visual Studio C# 2010 Express