DLNAメディアプレイヤーのサーバー機能を実装しました。
サーバーは DMP(Digital Media Player) のシーク機能をサポートし、XBMC または VLC プレーヤーは正しく動作します。
しかし、Microsoft Media Player でビデオを再生し、後の位置に移動しようとすると、メディア プレーヤーが停止しました。
MS Media Player のネットワーク パケットを解析し、MS Media Player の DMS(Digital Media Server) と同じヘッダーを作成しようとしました。
しかし、私はまだ失敗しました。
見逃した重要なタグ情報はありますか?
応答に関する私の応答コードは次のとおりです。
NetworkStream ns = new NetworkStream(mClient.Client);
try
{
StreamWriter sw = new StreamWriter(ns);
if (rangeBegin >= 1)
{
sw.WriteLine("HTTP/1.1 {0}", HttpStatus.Http206);
}
else
{
sw.WriteLine("HTTP/1.1 {0}", HttpStatus.Http200);
}
long k=total_size - rangeBegin;
sw.WriteLine("Content-Length: {0}",k );
sw.WriteLine("Content-Type: " + ContentType);
try
{
String st = HttpRequest.IfUnmodifiedSince;
sw.WriteLine("LAST-MODIFIED: " + st);
}
catch (Exception e)
{
Log(TAG, "Exception:" + e.Message);
}
sw.WriteLine("Server: PegaServer");
sw.WriteLine("Accept-Ranges: bytes");
//sw.WriteLine("ContentFeatures.DLNA.ORG: DLNA.ORG_PN=AVC_MP4_HP_HD_AAC;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=01500000000000000000000000000000");
sw.WriteLine("contentFeatures.dlna.org: DLNA.ORG_PN=AVC_MP4_HP_HD_AAC;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000");
sw.WriteLine("CONTENT-RANGE: bytes " + getContentRange());
sw.WriteLine("transferMode.dlna.org: Streaming");
String date = DateTime.Now.ToString("r");
sw.WriteLine("Date: " + date);
sw.WriteLine("Pragma: no-cache");
sw.WriteLine("Expires: 0");
sw.WriteLine("Cache-Control: no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform, private");
sw.WriteLine("Connection: close");
メディア シーク リクエストについて誰か提案してもらえますか?