【发布时间】:2013-11-30 06:23:27
【问题描述】:
我有一个项目需要将实时视频流发送到网络客户端。我有一个服务器应用程序,它实际上使用 DirectShow 从 Direct3D 场景中制作实时视频流。我有自己的 DirectShow 源过滤器,它的输出使用 WEBM 编解码器进行压缩。将视频流保存到文件时效果很好,以后可以毫无问题地查看。
但下一步是将实时视频流转换为网络客户端。我尝试通过 TCP 将它发送到我的 ASP.NET MVC4 应用程序。我的页面控制器如下所示:
public class VideosController : ApiController
{
/// <summary>
/// Web API method to paste into videocontainer in "video" tag on web page
/// </summary>
/// <param name="filename">File name with location path</param>
/// <param name="ext">Videofile extension</param>
/// <returns>Return stream content</returns>
public HttpResponseMessage Get(string filename, string ext)
{
var video = new VideoStream();
var response = Request.CreateResponse();
response.Content = new PushStreamContent(video.WriteToStream, new MediaTypeHeaderValue("video/" + ext));
return response;
}
}
和 video.WrtieToStream 方法:
public void WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
{
try
{
var buffer = new byte[65536];
TcpClient serverSocket;
serverSocket = new TcpClient("localHost", 333);
NetworkStream netStream = serverSocket.GetStream();
StreamReader streamReader = new StreamReader(netStream);
try
{
var bytesRead = 0;
while (true)
{
bytesRead = netStream.Read(buffer, 0, buffer.Length);
outputStream.Write(buffer, 0, bytesRead);
}
}
catch (EndOfStreamException)
{
Console.WriteLine("End of file transaction");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
catch (HttpException ex)
{
return;
}
finally
{
outputStream.Close();
}
}
我调试了代码,它似乎工作正常,即它接收传入的视频流并将其写入输出流,但我总是黑屏而不是流式传输视频。
当我将 WriteToStream 方法更改为从本地文件(之前从同一场景中保存)而不是从网络中读取视频时,视频运行良好。
我做错了什么?或者是否有其他解决方案可以将实时视频从视频服务器获取到 Web 客户端?
【问题讨论】:
-
您是否同时解决了这个问题?
标签: c# asp.net-mvc-4 video-streaming directshow directx-11