0

我一直在尝试使用我已添加到应用程序作为参考的 MediaInfo.dll 获取已上传到 MVC4 应用程序的一段视频内容的持续时间字符串。

使用以下代码在本地键入文件的位置时,我可以成功地查看文件的详细信息:

MediaFile uploadedFile = new MediaFile("C:\\Users\\jp\\Desktop\\Quarry.mp4");
string duration = uploadedFile.General.DurationString.ToString();

但是,当我尝试在上传的文件上使用它时,我没有得到我预期的信息。我的控制器如下:

[HttpPost, ValidateInput(true)]
    public ActionResult NewContent(HttpPostedFileBase postedFile, string username, FormCollection form)
    {
        if (postedFile != null)
        {
            HttpPostedFileBase postedFileCopy = postedFile;
            postedFileCopy.InputStream.Position = 0;
            Stream stream = postedFile.InputStream;

            MediaFile uploadedFile = new MediaFile(Server.MapPath(postedFile.FileName));
            string duration = uploadedFile2.General.DurationString.ToString();

            string[] name = form.GetValues("name");
            string[] author = form.GetValues("author");
            string[] description = form.GetValues("description");

            TimeSpan videoDuration = TimeSpan.Parse(duration);


            try
            {
                avm.AddContent(postedFile, stream, Convert.ToString(name[0]), Convert.ToString(author[0]), Convert.ToString(description[0]), videoDuration);
                return RedirectToAction("Contents", "Admin");
            }
            catch (Exception ex)
            {
                System.Diagnostics.EventLog.WriteEntry("Application", ex.Message, System.Diagnostics.EventLogEntryType.Error);
                return RedirectToAction("Unsuccessful", "Admin");
            }
        }
        else
            return RedirectToAction("NewCourse", "Admin");

    }

我努力了:

MediaFile uploadedFile = new MediaFile(Server.MapPath(postedFile.FileName));
MediaFile uploadedFile = new MediaFile(postedFile.FileName);
MediaFile uploadedFile = new MediaFile(postedFile.toString());
MediaFile uploadedFile = new MediaFile(System.IO.Path.GetFullPath(postedFile.FileName);

关于如何让MediaInfo以能够读取本地文件的相同方式识别 postedFile 的任何想法。或者我如何检索客户端计算机文件位置的路径。

4

1 回答 1

0

有一种方法可以使用流而不是文件来解析文件。

研究这些方法:

Open_Buffer_Init(..)
Open_Buffer_Continue(..)
Open_Buffer_Continue_GoTo_Get(..)
Open_Buffer_Init(..)

我花了一段时间才弄清楚如何获取缓冲区的 IntPtr .. 记得使用 GCHandle 和 AddrOfPinnedObject

如果您需要更多帮助,我的示例到处都是,我会尝试让我的代码再次运行。

于 2013-11-08T06:03:32.687 回答