WTM(ASP.NET 5)实现视频播放「终于解决」

WTM(ASP.NET 5)实现视频播放「终于解决」在是用WTM过程中,遇到了上传视频并播放的需求。期初,我也是翻了翻MS文档,发现实现过程也挺复杂的。后来一想,自己用的是WTM框架,自带文件上传,于是我请群里的大佬Rea帮忙测试。结果发现几百兆的文件上传毫无压力。一、创建上传模型publicclassVideoTest:BasePoco{[Display(Name=”视频标题”)]publicstringTitle{get;set;}publ…

大家好,欢迎来到IT知识分享网。

       在是用WTM过程中,遇到了上传视频并播放的需求。期初,我也是翻了翻MS文档,发现实现过程也挺复杂的。后来一想,自己用的是WTM框架,自带文件上传,于是我请群里的大佬Rea帮忙测试。结果发现几百兆的文件上传毫无压力。

WTM(ASP.NET 5)实现视频播放「终于解决」

 一、创建上传模型

public class VideoTest: BasePoco
    {
        [Display(Name = "视频标题")]
        public string Title { get; set; }
        public FileAttachment File { get; set; }
        [Display(Name = "选择视频")]
        public Guid FileId { get; set; }
    }

就和你使用WTM内置的模型中,实现用户管理中的图片是一样的。详细参照,WTM官当文档中有附件的模型章节

二、修改appsettings.json

由于WTM内置上传文件的保存方式,可选Database,local,oss,默认的是Database,文件数据全部以二进制文件保存,直接存数据库是不是压力山大,所以修改一下改为本地或第三方云存储。我这里选本地。

1、修改FileUploadOptions SaveFileMode的值为local

2、修改FileUploadOptions Settings GroupLocation ./upload(或者是绝对路径)

三、生成业务与视图代码

这个没啥好说的,WTM代码生成器使用简单快捷,我这里也不多说了。啥也不用设置,一直下一步就行了。生成的代码,重启下web就可以直接使用了

WTM(ASP.NET 5)实现视频播放「终于解决」

 WTM(ASP.NET 5)实现视频播放「终于解决」

 为了能实现预览功能,我们抄FrameworkUser的listvm代码,修改VideoTestListVM代码。

添加FileIdFormat方法,对文件进行格式化。

 private List<ColumnFormatInfo> FileIdFormat(Report_View entity, object val)
        {
            return new List<ColumnFormatInfo>
            {
                ColumnFormatInfo.MakeDownloadButton(ButtonTypesEnum.Button,entity.FileId),
                ColumnFormatInfo.MakeViewButton(ButtonTypesEnum.Button,entity.FileId,640,480),
            };
        }

 在InitGridHeader中添加this.MakeGridHeader(x => x.FileId).SetFormat(FileIdFormat)。

在GetSearchQuery修改为

try
            {
                var query = DC.Set<Report>()
                .CheckContain(Searcher.Title, x => x.Title)
                .Select(x => new Report_View
                {
                    ID = x.ID,
                    Title = x.Title,
                    FileId = x.FileId,
                })
                .OrderBy(x => x.ID);
                return query;
            }
            catch (Exception ex)
            {

                throw;
            }

这样,我们在重新启动程序。

进入对应的list后点击预览,可以查看刚刚上传的视屏

WTM(ASP.NET 5)实现视频播放「终于解决」

 四、使用H5视频播放

直接使用内置的文件访问接口即可,在WTM、独立HTML和SPA应用中同样适用。建议将appsettings.json中IsFilePublic,修改为true。这样不需要登录就可以访问文件了,要不然SPA转化图片或视频是真的麻烦。

<video controls="controls" width="320" height="240" poster="movie.jpg">
    <source src="/_Framework/GetFile?id=BB7CA43A-1730-474D-A6EB-D018230D21EC" type='video/mp4; codecs="avc1.4D401E, mp4a.40.2"'>
</video>

五、自定义视频流API接口,解决进度条失效问题。

前面的四步是可以完成上传和看视频了,会出现个情况HTM Video标签直无法拖动进度条了。设置起始时间更是不行。通过资料查询,找到问题所在和解决方案,发现是响应头缺少了一些属。

1、”Cache-Control”, “max-age=31536000, must-revalidate”

2、”accept-ranges”, “bytes”

3、content-type为video/mp4

这样,我们自定义一个视频流API接口解决此问题。

    /// <summary>
    /// 多媒体数据返回
    /// </summary>
    [Public]
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class MediaController : BaseApiController
    {
        public async Task<IActionResult> Video(Guid id)
        {
            var file = await DC.Set<FileAttachment>()
                .AsNoTracking()
                .FirstOrDefaultAsync(x => x.ID == id);

            var paht = file.Path;

            Response.Headers.Add("Cache-Control", "max-age=31536000, must-revalidate");
            Response.Headers.Add("accept-ranges", "bytes");
            var content = new FileStream(paht, FileMode.Open, FileAccess.Read, 
            FileShare.Read);
            var response = File(content, "video/mp4");
            
            return response;
        }
    }

将请求视频的标签修改为

<video id="_time" controls="controls" width="320" height="240" controlslist="nodownload">
        <source src="/api/Media/Video?id=@ViewBag.id" type='video/mp4; codecs="avc1.4D401E, mp4a.40.2"'>
 </video>

这样完美解决拖动问题,同时可通过js来进行播放控制。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25972.html

(0)
上一篇 2023-05-21 14:00
下一篇 2023-07-07 13:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信