使用MVC FileStream播放视频文件的问题

Chr*_*nty 5 asp.net-mvc video-streaming html5-video mediaelement.js

我正在尝试使用以下代码来检索要播放给用户的视频文件:

public class VideoController : Controller
{
    public VideoResult GetMP4Video(string videoID)
    {
        if (User.Identity.IsAuthenticated)
        {
            string clipLocation = string.Format("{0}\\Completed\\{1}.mp4", ConfigurationManager.AppSettings["VideoLocation"].ToString(), videoID);

            using (FileStream stream = new FileStream(clipLocation, FileMode.Open))
            {
                FileStreamResult fsResult = new FileStreamResult(stream, "video/mp4");
                VideoResult result = new VideoResult(ReadFully(fsResult.FileStream), "video/mp4");

                return result;
            }
        }
        else
        {
            return null;
        }
    }

    private static byte[] ReadFully(Stream input)
    {
        byte[] buffer = new byte[32 * 1024];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了向客户端显示我正在使用媒体元素:

<!-- Video Player Here -->
<video width="640" height="360" poster="@Url.Content(string.Format("~/Videos/{0}_2.jpg", Model.VideoID))" controls="controls" preload="none">
<!-- MP4 for Safari, IE9, iPhone, iPad, Android, and Windows Phone 7 -->
<source type="video/mp4" src="@Url.Action("GetMP4Video", "Video", new { videoID = Model.VideoID })" />
<!-- Flash fallback for non-HTML5 browsers without JavaScript -->
    <object width="320" height="240" type="application/x-shockwave-flash" data="@Url.Content("~/Scripts/ME/flashmediaelement.swf")">
        <param name="movie" value="@Url.Content("~/Scripts/ME/flashmediaelement.swf")" />
        <param name="flashvars" value="controls=true&file=@Url.Action("GetMP4Video", "Video", new { videoID = Model.VideoID })" />
        <!-- Image as a last resort -->
        <img src="myvideo.jpg" width="320" height="240" title="No video playback capabilities" />
    </object>
</video>
Run Code Online (Sandbox Code Playgroud)

问题是该文件似乎没有播放或至少不一致.在视频中寻找也似乎不能正常工作.我想我的问题是这是一种向用户提供视频的可接受方式吗?如果是这样,我错了什么?我认为重要的是我对视频非常陌生,而且我正在学习.任何帮助,将不胜感激.

Aby*_*Aby 0

是的,您正在尝试将网络服务器提供的 mp4 文件放入嵌入 HTML 文件中的播放器中,并且它无法正常播放(除非该文件相对非常小或者您的互联网连接速度非常快,所以文件会快速下载到浏览器的临时文件夹中)。

要正确传输视频文件,请按照以下任一步骤操作。

  1. 使用Windows媒体服务器/Flash媒体服务器。通过 Windows Media Encoder 或 Flash Media Encoder 将您的网络摄像头推送到服务器,并使用服务器实时链接通过任何合适的播放器(如 jwplayer)链接到您的网站。

  2. 使用 Windows Media Encoder 将网络摄像头流式传输给任何人,无需涉及服务器。当编码器启动时,您将获得一个用于查看流的 URL,您可以使用该 URL 在您的站点中发布。

  3. 使用第三方流媒体服务,他们为您提供一个发布点来发布您的网络摄像头流,并使用他们提供的链接将其显示在您的网站上。(通过 LiveStream 与 brigcove 或 Mogulus 核实

希望这可以帮助。