5

次のコードを使用して、ユーザーに再生するビデオ ファイルを取得しようとしています。

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();
        }
    }
}

クライアントに表示するために、私はメディア要素を使用しています:

<!-- 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>

問題は、ファイルが再生されていないように見えるか、少なくとも一貫していないことです。また、ビデオのシークも適切に機能していないようです。私の質問は、これはビデオをユーザーに提供するための許容可能な方法ですか? もしそうなら、私は何が間違っていますか?私はビデオに非常に慣れていないことが重要だと思いますが、進むにつれて非常に学習しています。どんな助けでも大歓迎です。

4

2 に答える 2

0

はい、Web サーバーによって提供される mp4 ファイルを、HTML ファイルに埋め込まれたプレーヤーに入れようとしていますが、適切に再生されません (ファイルが比較的非常に小さいか、非常に高速なインターネット接続を使用している場合を除きます。ファイルがブラウザーの一時フォルダーに高速にダウンロードされることを確認します)。

動画ファイルを適切にストリーミングするには、以下のいずれかの手順に従ってください。

  1. Windows メディア サーバー/フラッシュ メディア サーバーを使用します。Windows Media エンコーダーまたはフラッシュ メディア エンコーダーによって Web カメラをサーバーにプッシュし、サーバーのライブ リンクを使用して、適切なプレーヤー (jwplayer など) を介して Web サイトにリンクします。

  2. Windows Media エンコーダーを使用して、サーバーを介さずに Web カメラを誰にでもストリーミングできます。エンコーダーが起動すると、ストリームを表示するための URL が取得されます。これを使用して、サイトで公開できます。

  3. サードパーティのストリーミング サービスを使用して、ウェブカメラ ストリームを公開するための公開ポイントを提供し、提供されたリンクを使用してウェブサイトに表示します。(LiveStream で、brighcove または Mogulus で確認してください。

お役に立てれば。

于 2013-09-12T14:31:17.557 に答える