0

私は初心者です。以下のコードからビデオを作成した後、ラベルメッセージをどこにどのように配置する必要がありますか。
プロセスが完了した後、label1という2つのメッセージを表示したいと思います。ビデオは正常に作成され、2番目のメッセージはビデオのビデオパスです。
プロセスが完了した後(ビデオが作成された後)にのみ表示したい。

namespace test
{
    public partial class liveRecording : System.Web.UI.Page
    {
    //video codec
    AVIWriter writer = new AVIWriter("MSVC");  

    protected void Page_Load(object sender, EventArgs e)
    {
        string streamingSource = "http://xxx.sample.com:85/snapshot.cgi";
        string login = "login";
        string password = "password";

        JPEGStream JPEGSource = new JPEGStream(streamingSource);
        JPEGSource.Login = login;
        JPEGSource.Password = password;
        JPEGSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
        JPEGSource.Start();
    }

    public bool IsRecording = false;
    int width = 0;
    int height = 0;

    Queue<Bitmap> frames = new Queue<Bitmap>(); //Queue that store frames to be written by the recorder thread

    private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) //event handler for NewFrame
    {
        //get frame from JPEGStream source
        //Bitmap image = eventArgs.Frame;
        Bitmap image = (Bitmap)eventArgs.Frame.Clone(); //get a copy of the Bitmap from the source

        width = image.Width;
        height = image.Height;

        if (IsRecording)
        {
            //enqueue the current frame to be encoded to a video file
            frames.Enqueue((Bitmap)image.Clone());
        }

        if (!IsRecording)
        {
            IsRecording = true;
            Thread th = new Thread(DoRecording);
            th.Start();
        }
    }

    private void DoRecording()
    {
        //writer.FrameRate = 5;
        string SavingPath = (Server.MapPath("~\\video\\")); 
        string VideoName = "ICS_" + String.Format("{0:yyyyMMdd_hhmmss}", DateTime.Now) + ".avi";
        writer.Open(SavingPath + VideoName, width, height);

        DateTime start = DateTime.Now;
        while (DateTime.Now.Subtract(start).Seconds < 30)
        {
            if (frames.Count > 0)
            {
                Bitmap bmp = frames.Dequeue();
                writer.AddFrame(bmp);//add frames to AVI file
            }
        }
        writer.Close();//close
    }
}
}
4

1 に答える 1

0

プロセスが完了した(ビデオが作成された)後にのみ表示したい。

次に、基本的にAJAXを使用する必要があります。「エンコードの開始」(または何でも)リクエストはすぐに完了する必要があるため、ユーザーは適切なページに戻ります。そのページには、サーバーを定期的にポーリングしてタスクが完了したかどうかを確認する Javascript が含まれている必要があります。調整が必要です (たとえば、クライアントに提供されるランダムに生成された「ジョブ ID」を介して)。「ロングポーリング」(ジョブが完了するかタイムアウトするまで待機することが予想されるリクエストをAJAXが起動する場合)にSignalRのようなものを使用するか、数秒ごとにクイックポーリングリクエストを作成することができます。

残念ながら、Web 開発に慣れていない場合、これは簡単なことではありません。しかし、HTTP 要求と応答に基づく世界では、実行しようとしているタスクは簡単ではありません。

于 2012-10-10T06:16:50.350 に答える