ASP.NET截取上传视频,swf文件第一帧作为预览图片

视频上传、预览、通过视频url获取第一帧(任意帧) 上传其实就是将你选择的文件转成file文件,我们拿到file文件之后再做处理。比如传到服务器,服务器返回一个fileId,我们下次需要反显的时候可以根据这个fileId去服务器拿对应的文件。 阅读详情

下面介绍使用ASP.NET上传视频文件并且转换为FLV文件的方法,还要生成视频图片。下面开始吧
WEB.config配置节如下
+展开
-XML
             <appSettings>
        
         <add key="ffmpeg" value="ffmpeg/ffmpeg.exe"/>
         <add key="mencoder" value="mencoder/mencoder.exe"/>
         <add key="mplayer" value="mencoder/mplayer.exe"/>
        
         <add key="upfile" value="UpFiles"/>
        
         <add key="imgfile" value="ImgFile"/>
        
         <add key="CatchFlvImgSize" value="240x180"/>
         <add key="widthSize" value="400"/>
         <add key="heightSize" value="350"/>
        
         <add key="playfile" value="PlayFiles"/>
     </appSettings >

上传类:
-C#
namespace VideoToFLV
{
     public  class  PublicMethod:System.Web.UI.Page
    {
           public PublicMethod()
    {
        
    }
     //文件路径
     public  static  string ffmpegtool = ConfigurationManager.AppSettings[ "ffmpeg"];
     public  static  string mencodertool = ConfigurationManager.AppSettings[ "mencoder"];
     public  static  string mplayertool = ConfigurationManager.AppSettings[ "mplayer"];
     public  static  string upFile = ConfigurationManager.AppSettings[ "upfile"] +  "/";
     public  static  string imgFile = ConfigurationManager.AppSettings[ "imgfile"] +  "/";
     public  static  string playFile = ConfigurationManager.AppSettings[ "playfile"] +  "/";
     //文件图片大小
     public  static  string sizeOfImg = ConfigurationManager.AppSettings[ "CatchFlvImgSize"];
     //文件大小
     public  static  string widthOfFile = ConfigurationManager.AppSettings[ "widthSize"];
     public  static  string heightOfFile = ConfigurationManager.AppSettings[ "heightSize"];
     //
     //
     //获取文件的名字
     public  static  string GetFileName( string fileName)
    {
         int i = fileName.LastIndexOf("\\") + 1;
         string Name = fileName.Substring(i);
         return Name;
    }
     //获取文件扩展名
     public  static  string GetExtension( string fileName)
    {
         int i = fileName.LastIndexOf( ".")+1;
         string Name = fileName.Substring(i);
         return Name;
    }
     //

     # region
      //运行FFMpeg的视频解码,(这里是绝对路径)
     /// 
     /// 转换文件并保存在指定文件夹下面(这里是绝对路径)
     /// 
     /// 上传视频文件的路径(原文件)
     /// 转换后的文件的路径(网络播放文件)
     /// 从视频文件中抓取的图片路径
     /// 成功:返回图片虚拟地址;  失败:返回空字符串
     public  string ChangeFilePhy( string fileName,  string playFile,  string imgFile)
    {
         //取得ffmpeg.exe的路径,路径配置在Web.Config中,如:  
         string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool);
         if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName)))
        {
             return  "";
        }

         //获得图片和(.flv)文件相对路径/最后存储到数据库的路径,如:/Web/User1/00001.jpg  
      
         string flv_file = System.IO.Path.ChangeExtension(playFile,  ".flv");


         //截图的尺寸大小,配置在Web.Config中,如:  
         string FlvImgSize = PublicMethod.sizeOfImg;

        System.Diagnostics. ProcessStartInfo FilestartInfo =  new System.Diagnostics.ProcessStartInfo(ffmpeg);

        FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

        FilestartInfo.Arguments =  " -i " + fileName +  " -ab 56 -ar 22050 -b 500 -r 15 -s " + widthOfFile +  "x" + heightOfFile +  " " + flv_file;
         //ImgstartInfo.Arguments = "  -i  " + fileName + "  -y  -f  image2  -t  0.05  -s  " + FlvImgSize + "  " + flv_img;

         try
        {
             //转换
            System.Diagnostics.Process.Start(FilestartInfo);
             //截图
            CatchImg(fileName, imgFile);
             //System.Diagnostics.Process.Start(ImgstartInfo);
        }
         catch
        {
             return  "";
        }
         //
         return  "";
    }
     //
     public  string CatchImg( string fileName, string imgFile)
    {
         //
         string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool);
         //
         string flv_img =imgFile+ ".jpg";
         //
         string FlvImgSize = PublicMethod.sizeOfImg;
         //
        System.Diagnostics. ProcessStartInfo ImgstartInfo =  new System.Diagnostics.ProcessStartInfo(ffmpeg);
        ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
         //
        ImgstartInfo.Arguments =  "  -i  " + fileName +  "  -y  -f  image2  -ss 2 -vframes 1  -s  " + FlvImgSize +  " " + flv_img;
         try
        {
            System.Diagnostics.Process.Start(ImgstartInfo);
        }
         catch
        {
             return  "";
        }
         //
         if (System.IO.File.Exists(flv_img))
        {
             return flv_img;
        }

         return  "";
    }
    # endregion
     //
# region
     //运行FFMpeg的视频解码,(这里是(虚拟)相对路径)
     /// 
     /// 转换文件并保存在指定文件夹下面(这里是相对路径)
     /// 
     /// 上传视频文件的路径(原文件)
     /// 转换后的文件的路径(网络播放文件)
     /// 从视频文件中抓取的图片路径
     /// 成功:返回图片虚拟地址;  失败:返回空字符串
     public  string ChangeFileVir( string fileName,  string playFile,  string imgFile)
    {
         //取得ffmpeg.exe的路径,路径配置在Web.Config中,如:  
         string ffmpeg = Server.MapPath(PublicMethod.ffmpegtool);
         if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName)))
        {
             return  "";
        }

         //获得图片和(.flv)文件相对路径/最后存储到数据库的路径,如:/Web/User1/00001.jpg  
         string flv_img = System.IO.Path.ChangeExtension(Server.MapPath(imgFile),  ".jpg");
         string flv_file = System.IO.Path.ChangeExtension(Server.MapPath(playFile),  ".flv");


         //截图的尺寸大小,配置在Web.Config中,如:  
         string FlvImgSize = PublicMethod.sizeOfImg;

        System.Diagnostics. ProcessStartInfo FilestartInfo =  new System.Diagnostics.ProcessStartInfo(ffmpeg);
        System.Diagnostics. ProcessStartInfo ImgstartInfo =  new System.Diagnostics.ProcessStartInfo(ffmpeg);

        FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
         //此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg  0.4.9调试通过 
         //ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv
        FilestartInfo.Arguments =  " -i " + fileName +  " -ab 56 -ar 22050 -b 500 -r 15 -s " + widthOfFile +  "x" + heightOfFile +  " " + flv_file;
        ImgstartInfo.Arguments =  "  -i  " + fileName +  "  -y  -f  image2  -t  0.001  -s  " + FlvImgSize +  " " + flv_img;

         try
        {
            System.Diagnostics.Process.Start(FilestartInfo);
            System.Diagnostics.Process.Start(ImgstartInfo);
        }
         catch
        {
             return  "";
        }

         ///注意:图片截取成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;  
         ///这儿需要延时后再检测,我服务器延时8秒,即如果超过8秒图片仍不存在,认为截图失败;  
         ///此处略去延时代码.如有那位知道如何捕捉ffmpeg.exe截图失败消息,请告知,先谢过!  
         if (System.IO.File.Exists(flv_img))
        {
             return flv_img;
        }

         return  "";
    }
    # endregion

    # region
     //运行mencoder的视频解码器转换(这里是(绝对路径))
     public  string MChangeFilePhy( string vFileName,  string playFile,  string imgFile)
    {
         string tool = Server.MapPath(PublicMethod.mencodertool);
         //string mplaytool = Server.MapPath(PublicMethod.ffmpegtool);
        
         if ((!System.IO.File.Exists(tool)) || (!System.IO.File.Exists(vFileName)))
        {
             return  "";
        }

         string flv_file = System.IO.Path.ChangeExtension(playFile,  ".flv");


         //截图的尺寸大小,配置在Web.Config中,如:  
         string FlvImgSize = PublicMethod.sizeOfImg;

        System.Diagnostics. ProcessStartInfo FilestartInfo =  new System.Diagnostics.ProcessStartInfo(tool);
      
        FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        FilestartInfo.Arguments =  " " + vFileName +  " -o " + flv_file +  "-of lavf -lavfopts  i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:mbd=2:mv0:trell:v4mv:cbp:last_pred=1:dia=-1:cmp=0:vb_strategy=1 -vf scale=" + widthOfFile +  ":" +heightOfFile +  " -ofps 12 -srate 22050";
         try
        {
            System.Diagnostics.Process.Start(FilestartInfo);
            CatchImg(flv_file, imgFile);
        }
         catch
        {
             return  "";
        } 
         //
         return  "";
    }
    # endregion

    }
}

 

VideoToFLV.rar

mencoder.exe,mplayer.exe由于太大,请去这里下载,MPlayer-mingw32-1.0rc2.zip


asp.net从视频文件中抓取一桢并生成图像文件源码 废话了,我们经常为图片生成缩略图,在windows中视频在察看缩略图的时候也显示出图片来,如果作一个视频系统,那么用户上传上来的视频,如何为其生成缩略图呢?要想操作视频文件,通常所用的方法就是DirectX里面的DriectShow,用它就可以实现抓屏,抓图,抓视频的功能,想到这,又惊奇于ms演示的vista下的app那绚的3d效果. 要想在.net中使用DirectShow,所做的第一件事情是需要一个程序集,这个程序集可以帮你完成.net对directshow的调用,而且您不需要用com,省却注册过程,这个assembly的名字为:Interop.DexterLib.dll, 它象其他dll,只需添加引用即可。 立即下载

相关推荐

STC8单片机高精度EV1527解码实战:定时器捕获+状态机抗干扰方案

EV1527是一种广泛应用于433MHz无线遥控的曼彻斯特编码协议,其核心在于对脉宽时序(如同步头、逻辑0/1)的微秒级精确识别。传统外部中断+延时判别方式受MCU中断延迟、编译优化及环境噪声影响,极易导致误码;而基于硬件定时器输入捕获的解码方案,将时间测量交由硬件完成,显著提升时序鲁棒性与温度/电压适应性。该技术适用于STC8等无专用无线解码外设的8位单片机,在智能开关、晾衣架、车库门控等IoT终端中实现低至0.003%的稳定误码率。本文聚焦STC8H系列利用T1定时器下降沿捕获与有限状态机协同解码EV1

weixin_29188997的博客 181

C#视频取帧图的比较靠谱方法

由于项目里页面有许多视频资料需要展示给用户查看,因此需要做一个视频列表,原设计是列表显示视频第一帧图,但实际上很多视频第一帧是纯黑底色。 于是想到用js利用canvas截图,最后发现由于浏览器跨域限制,这种方法只能取内部视频的帧图。问题是,现在谁还把大量视频资料放在自己的服务器上呢,那不是找死吗。。。。唉。。。。 没办法,只能再想招了,最后只能用c#后台逐个视频取对应帧图,然后跟视频路径一起存...

丰云 之 薪火 1万+

逆向解析抖音核心校验参数:bd-ticket-guard-client-data的Python生成逻辑

本文深入解析了抖音核心校验参数bd-ticket-guard-client-data的生成逻辑,详细介绍了其动态证书生成、非对称加密机制及Python实现方法。通过逆向分析,揭示了抖音安全体系的双层验证机制,包括RSA密钥对生成、证书签名及时间戳校验等关键技术要点,为开发者提供了一套完整的参数生成解决方案。

weixin_26642481的博客 411

怎么获取网络视频中的第一帧或者任意帧

第一种方式: public static Bitmap getVideoThumb(String path) { Bitmap bitmap = null; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { //根据url获取缩略图 retriever.setDataSource(path, new HashMap

weixin_42789301的博客 1856

从像素到光影:解析《黑神话:悟空》中Nanite与Lumen的协同渲染革命

本文深度解析了《黑神话:悟空》如何利用Unreal Engine 5的Nanite与Lumen技术实现渲染革命。Nanite处理亿级多边形几何细节,无需传统LOD优化;Lumen提供全动态全局光照,实现实时光线反弹。两者协同工作,为游戏带来电影级视觉体验,重塑了实时渲染的技术标准与工作流程。

f6g7h8i9j的博客 425

原理图转PCB

本文讲述了原理图的编译、原理图转PCB的步骤和易错点。

m0_58083051的博客 3289

截取本地视频第一帧和渲染本地图片或视频

【代码】截取本地视频第一帧和渲染本地图片或视频。

qq_59556663的博客 422

SWD下载调试接口原理深度剖析

作为ARM嵌入式工程师,下载调试器都应该知道,但你真正了解SWD如何下载调试的么?ARM 芯片通过什么物理接口和什么方式连接完全取决于芯片Debug子系统的架构如何?

zhuwade的博客 1万+

在asp.net中如何从视频文件中抓取一桢并生成图像文件

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 1020

AUTOSAR进阶图解==>AUTOSAR_SWS_CANNetworkManagement

本文介绍了AUTOSAR架构中的CAN网络管理(CanNm)模块,主要内容包括: 模块概述:CanNm是协调CAN网络节点状态转换的基础组件,采用去中心化设计,通过周期性发送网络管理PDU保持网络活跃状态,支持网络唤醒、睡眠和部分网络功能。 架构设计:CanNm位于AUTOSAR中间层,连接上层通信管理器(ComM)和底层CAN接口(CanIf),包含状态管理、PDU处理和定时器管理等子组件。 状态机设计:定义了三种主要模式(总线睡眠、准备睡眠和网络模式)及其转换逻辑,网络模式又包含重复消息、正常操作和准备

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 2041

AD22等长布线规则

本文介绍了PCB布线中实现信号线等长的详细操作步骤:1.创建网络类(NetClass),将需要等长的信号线归入同一组;2.设置高速布线规则(High-SpeedRule),定义等长容差等参数;3.进行交互式等长布线(InteractiveLengthTuning),使用蛇形线调整线长;4.实时调整与最终检查,确保所有网络满足等长要求。文中还提供了实用技巧,如使用快捷键调整蛇形线参数、为关键信号设置更严格规则等。操作需在PCB设计软件中完成,通过统一管理、规则设置和精确调整来实现信号同步传输。

whm128的博客 1557

[转]ASP.NET截取上传视频,swf文件第一帧作为预览图片上传类:

1 <appSettings> 2 3 <add key="ffmpeg" value="ffmpeg/ffmpeg.exe"/> 4 <add key="mencoder" value="mencoder/mencoder.exe"/> 5 <add key="mpla...

weixin_30411997的博客 279

GEE 案例分析:利用Landsat数据进行FAI、NDVI及CHLA分析并统计平均值(巢湖为例)

浮游藻类指数(FAI)、归一化植被指数(NDVI)及叶绿素a(CHLA)是水体环境监测的重要指标。本文利用Google Earth Engine(GEE)平台,基于Landsat 5和Landsat 8数据,进行水体藻类及植被监测。

此星光明博客 1336

asp.net判断上传文件格式的方法

 ASP.NET中在判断文件格式时,如果通过截取扩展名来做判断、通过ContentType (MIME) 判断都不太安全,因为这两种方式用户都可以伪造。 下面介绍通过byte获取文件类型,来做判断的方式   if (Request.Files.Count > 0) { //这里只测试上传第一张图片file[0] HttpPostedFile file0 = Reques

whaxrl的专栏 2131

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

开发视频网站,asp.net视频文件转换.fla格式

最经公司有一个小项目需要把视频转换成FLASH文件,效果就是像用户注册youku网一样,自己可以视频上传,转换成flash格式播放。苦于以前没有做过,于是马上搜索了相关的文章,看了http://www.cnblogs.com/xiucai/ 和 http://www.cnblogs.com/seebook/关于这方面的文章,对我帮助很大。今天第一天开博,我就记录下它们。现在出现很多的在线视频网站,

johncools的博客 2842

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

开发视频网站,asp.net视频文件转换.flv格式(转)

最经公司有一个小项目需要把视频转换成FLASH文件,效果就是像用户注册youku网一样,自己可以视频上传,转换成flash格式播放。<br />苦于以前没有做过,于是马上搜索了相关的文章,看了http://www.cnblogs.com/xiucai/ 和 http://www.cnblogs.com/seebook/关于这方面的文章,对我帮助很大。今天第一天开博,我就记录下它们。<br /><br />现在出现很多的在线视频网站,其实其文件播放的格式都是.FLV格式(开始还以为是swf了)。<br /><

Carter的菜园子 1837

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

asp.net如何正确判断上传文件格式

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34023863的博客 215

ASP.NET通过byte正确安全的判断上传文件格式

本文介绍一种更安全的方式上传图片,他能有效的防止一些通过修改文件后缀或MIME来伪造的图片的上传,从而保证服务器的安全,希望对大家有所帮助。 ASP.NET中在判断文件格式时,我们以前常用的方法就是通过截取扩展名来做判断,或者通过ContentType (MIME) 判断,这两种方法都不太安全,因为这两种方式用户都可以伪造,从而达可以攻击网站,实现给网站挂马等目的。 下面介绍通过byte获取文...

weixin_34096182的博客 305

开发视频网站,asp.net视频文件转换.flv格式

最近公司有一个小项目需要把视频转换成FLASH文件,效果就是像用户注册youku网一样,自己可以视频上传,转换成flash格式播放。苦于以前没有做过,于是马上搜索了相关的文章,看了http://www.cnblogs.com/xiucai/ 和 http://www.cnblogs.com/seebook/关于这方面的文章,对我帮助很大。今天第一天开博,我就记录下它们。现在出现很多的在线视频网站,

baihaixiao的专栏 995

java web截图控件,怎么用java实现web工程中整个屏幕的截图

如何用java实现web工程中整个屏幕的截图请各位大侠看清问题,方便下面的讨论1.javaweb工程2.html页面中嵌入了swf文件3.任何一个用户通过页面展示对swf文件的各种点击、输入、提交4.用户操作完成后,可以对自己操作后页面的展示进行整个屏幕的截图。我之前考虑过用selenium,但是研究很长时间后,发现selenium是可以对flex进行自动化操作,但是不太符合我这个需求的要求,因...

weixin_42116805的博客 467

.net core image怎么保存_【OPENCV】OPENCV+获取视频中某一帧的图像并保存

配置: opencv3.2 VS2017 Windows10下载opencv 并添加path路径之后在VS上配置具体网上很多例子写的都不错 可以看下http://blog.csdn.net/poem_qianmo/article/details/19809337/ 如果是li...

weixin_39690958的博客 280

获取视频的第一帧缩略图(本地视频、网络视频)

在开发中,对视频进行操作,将视频显示在界面上时,都是显示的视频的第一帧的图片。比如,在录制视频上传(上传界面)、下载视频(视频下载列表);这两个功能我的项目中都用到了,这两个需求刚好是获取视频的第一帧的图片的两种视频形式(本地视频、网络视频)。 1.MediaMetadataRetrieve  从API10开始新增的这个类,用来获取媒体文件的信息,比如视频的某一帧。 MediaMetadat

七月的博客 1万+

如何获取网络视频(或者说后台返回视频URL)第一帧图片以及获取本地视频的第一帧图片

在项目开发的时候,有可能会有这样的一种需求:有一段视频需要展示给用户,在界面上先展示视频上的某一帧图片,用户点击的时候再去获取视频资源进行播放。这时,服务器会先给我们返回视频的url,这个时候就需要通过视频url去获取第一帧图片进行展示了!具体代码实现如下:获取网络视频第一帧图片代码: /** * 服务器返回url,通过url去获取视频的第一帧 * Androi

探路的淮--Ontheway的博客 7532

C# 截取视频第一帧的图片

1.需要借助外部插件 2.视频来源 外部插件:(http://ffmpeg.org/download.html)

静墨客的博客 5342
上一篇: C#(asp.net)上传视频转换为flv格式并给视频截图代码
下一篇: C#中把Datatable转换为Json的5个代码实例
cuoban
博客等级 码龄24年 239粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值