【问题标题】:Using FFMpeg with Asp .Net Core and video stream将 FFMpeg 与 Asp .Net Core 和视频流一起使用
【发布时间】:2021-11-28 05:07:31
【问题描述】:

我正在实现一个 API,它允许用户发送视频流并生成缩略图。我正在使用 asp.net coreAzure Blob 存储。 API接口是这样的:

    [HttpPost]
    [Route("test_upload")]
    public IActionResult TestUpload( IFormFile mediaFile ) {
        //->store mediaFile
        //->generate thumbnail
        //->save thumbnail
        return Ok();
    }

我需要做两件主要的事情:

  1. 生成缩略图
  2. 获取时长等视频信息

我尝试使用 Nuget 中的库,但所有这些都需要文件路径,而我没有文件路径,只有视频流或保存后 Blob 存储中的 Blob。那么,我的问题是,如何使用 FFmpeg 或其他工具直接从流中管理视频?

我知道 Azure 媒体服务提供了很多工具来管理视频和音频等媒体文件,但对于只有 2Mb 和 30 秒长的视频来说太慢了。而且我不需要对视频进行编码、创建流或其他类似的东西。我只需要从 Stream 中获取视频信息并将视频存储在 Storage 中。

有什么想法吗?谢谢!

更新 1: 我通过为临时视频创建一个文件夹编写了一个解决方法,我只是将视频保存在此文件夹中,创建缩略图并删除临时文件。但我不知道这种做法是否有一些不好的副作用。

【问题讨论】:

  • 我认为不可能直接来自流或 blob 存储。但是您可以先将流存储在“正常”(临时)存储中并在那里进行处理。另请参阅此答案:stackoverflow.com/questions/43681552/…
  • 好的,谢谢,这个方法有效。但是,允许服务器将临时文件保存在文件夹中是一个好习惯吗?会不会有什么副作用?

标签: azure asp.net-core video ffmpeg


【解决方案1】:

谢谢Poiter,发表您的评论作为答案,这将对其他社区成员有所帮助。

上传到%TEMP%(扩展为d:\local\temp)。这是应用服务中的本地存储。然后所有这些库都应该针对本地文件系统工作,包括MediaInfo

使用每晚的 WebJob 清理您的 %TEMP%,以解决过时/不完整的上传(即删除超过 6 小时的文件),以防您对文件系统的删除调用由于不可预见的原因不时失败。

会有副作用吗?

将输入流缓存到临时文件。它为直播带来了搜索功能。
请参考FFmpeg Cache

【讨论】:

  • 您好@Gaetano Lenoci,如果答案有帮助,请Accept it as an Answer,以便遇到相同问题的其他人可以找到此解决方案并解决他们的问题。
猜你喜欢
  • 2021-04-19
  • 2018-10-19
  • 2018-08-30
  • 2019-09-12
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
相关资源
最近更新 更多