/// <summary> /// ストリームにプレイリストを出力します /// </summary> protected void WritePlayList() { bool mms = Channel.ChannelInfo.ContentType == "WMV" || Channel.ChannelInfo.ContentType == "WMA" || Channel.ChannelInfo.ContentType == "ASX"; IPlayList pls; if (mms) { pls = new ASXPlayList(); } else { pls = new M3UPlayList(); } pls.Channels.Add(Channel); var baseuri = new Uri( new Uri(request.Uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.UriEscaped)), "stream/"); Send(pls.CreatePlayList(baseuri)); }
/// <summary> /// ストリームにプレイリストを出力します /// </summary> protected void WritePlayList() { bool mms = Channel.ChannelInfo.ContentType=="WMV" || Channel.ChannelInfo.ContentType=="WMA" || Channel.ChannelInfo.ContentType=="ASX"; IPlayList pls; if (mms) { pls = new ASXPlayList(); } else { pls = new M3UPlayList(); } pls.Channels.Add(Channel); var baseuri = new Uri( new Uri(request.Uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.UriEscaped)), "stream/"); Send(pls.CreatePlayList(baseuri)); }
/// <summary> /// HTTPのレスポンスヘッダを作成して取得します /// </summary> /// <returns> /// コンテント毎のHTTPレスポンスヘッダ /// </returns> protected string CreateResponseHeader() { if (Channel==null) { return "HTTP/1.0 404 NotFound\r\n"; } switch (GetBodyType()) { case BodyType.None: return "HTTP/1.0 404 NotFound\r\n"; case BodyType.Content: { bool mms = Channel.ChannelInfo.ContentType=="WMV" || Channel.ChannelInfo.ContentType=="WMA" || Channel.ChannelInfo.ContentType=="ASX"; if (mms) { return "HTTP/1.0 200 OK\r\n" + "Server: Rex/9.0.2980\r\n" + "Cache-Control: no-cache\r\n" + "Pragma: no-cache\r\n" + "Pragma: features=\"broadcast,playlist\"\r\n" + "Content-Type: application/x-mms-framed\r\n"; } else { return "HTTP/1.0 200 OK\r\n" + "Content-Type: " + Channel.ChannelInfo.MIMEType + "\r\n"; } } case BodyType.Playlist: { bool mms = Channel.ChannelInfo.ContentType=="WMV" || Channel.ChannelInfo.ContentType=="WMA" || Channel.ChannelInfo.ContentType=="ASX"; IPlayList pls; if (mms) { pls = new ASXPlayList(); } else { pls = new M3UPlayList(); } pls.Channels.Add(Channel); return String.Format( "HTTP/1.0 200 OK\r\n" + "Server: {0}\r\n" + "Cache-Control: private\r\n" + "Content-Disposition: inline\r\n" + "Connection: close\r\n" + "Content-Type: {1}\r\n", PeerCast.AgentName, pls.MIMEType); } default: return "HTTP/1.0 404 NotFound\r\n"; } }
/// <summary> /// HTTPのレスポンスヘッダを作成して取得します /// </summary> /// <returns> /// コンテント毎のHTTPレスポンスヘッダ /// </returns> protected string CreateResponseHeader() { if (Channel == null) { return("HTTP/1.0 404 NotFound\r\n"); } switch (GetBodyType()) { case BodyType.None: return("HTTP/1.0 404 NotFound\r\n"); case BodyType.Content: { bool mms = Channel.ChannelInfo.ContentType == "WMV" || Channel.ChannelInfo.ContentType == "WMA" || Channel.ChannelInfo.ContentType == "ASX"; if (mms) { return ("HTTP/1.0 200 OK\r\n" + "Server: Rex/9.0.2980\r\n" + "Cache-Control: no-cache\r\n" + "Pragma: no-cache\r\n" + "Pragma: features=\"broadcast,playlist\"\r\n" + "Content-Type: application/x-mms-framed\r\n"); } else { return ("HTTP/1.0 200 OK\r\n" + "Content-Type: " + Channel.ChannelInfo.MIMEType + "\r\n"); } } case BodyType.Playlist: { bool mms = Channel.ChannelInfo.ContentType == "WMV" || Channel.ChannelInfo.ContentType == "WMA" || Channel.ChannelInfo.ContentType == "ASX"; IPlayList pls; if (mms) { pls = new ASXPlayList(); } else { pls = new M3UPlayList(); } pls.Channels.Add(Channel); return(String.Format( "HTTP/1.0 200 OK\r\n" + "Server: {0}\r\n" + "Cache-Control: private\r\n" + "Content-Disposition: inline\r\n" + "Connection: close\r\n" + "Content-Type: {1}\r\n", PeerCast.AgentName, pls.MIMEType)); } default: return("HTTP/1.0 404 NotFound\r\n"); } }