热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#用ckplayer.js播放MP4格式视频实现边加载边播放

MVC设计模式下在View页面里面使用ckplayer.js加载视频,在MP4格式视频上传之后我发现某些视频可以边加载边播放但是有一些又不行,找了下原因是因为视频的元数据信息在第一帧的时候就

MVC设计模式下 在View页面里面使用ckplayer.js 加载视频 ,在MP4格式视频上传之后 我发现某些视频可以边加载边播放 但是有一些又不行,找了下原因是因为视频的元数据信息在第一帧的时候就不行;找了下解决方案:是下载一个工具处理视频

下载的页面地址是: http://ffmpeg.zeranoe.com/builds/

点击页面上的Download FFmpeg git-738ebb4 64-bit Static(我是64位的),如果你是32位点击 Download FFmpeg git-738ebb4 32-bit Static

下载下来解压缩后我把文件夹改成了ffmpeg放在D盘下面
运行三个文件:
D:ffmpeg/bin/ffmpeg.exe
D:ffmpeg/bin/ffplay.exe
D:ffmpeg/bin/ffprobe.exe
这就成功安装了


下面举二个简单的例子
首先,搞一个视频文件放在D盘根目录下,主要为了省事,比如我放的是:D:/1.flv
在开始->运行里输入cmd,弹出命令窗口
按下面的命令进行操作
输入d:按回车
输入 cd ffmpeg/bin回车
这样就进入了ffmpeg的目录了,
1:测试视频截图的功能
复制如下命令,在命令行里点击鼠标右键选择粘贴
ffmpeg -i d:/1.flv -y -f  image2 -t 0.001 -s 720x576 d:/1.jpg
看看D盘下是不是生成了一个1.jpg的图片,是的话就成功了,不是你就认真检查下吧,看看路径是不是正确
2:测试d:/1.flv转成d:/1.mp4
同样,复制下面的命令,在命令窗口里点击鼠标右键选择粘贴

ffmpeg.exe -i "d:1.flv" -y  -metadata title="这是视频标题"  -metadata comment="这是视频信息!"   -c:v libx264  -preset superfast -x264opts keyint=25  -r 15 -b:v 500k -c:a aac -strict experimental -ar 44100 -ac 2  -b:a 64k -vf  "movie=a.png[watermark];scale=1364x768[scale];[scale][watermark] overlay=30:30[out]" -f  mp4 "d:2.mp4"

等命令执行完成后看看D盘下是不是有个mp4了,有了就说明成功了。

参数说明:

movie=是水印
-b:v 后的500k是码率
scale=后是分辩率
keyint=25 是关键帧 表示每25帧会有一个关键帧

 

如果你的视频只是元数据信息不在第一帧,下面介绍另一种mp4把元数据信息转到视频第一帧

首先需要下载一个qt-faststart
下载地址:http://www.ckplayer.com/down/qt-faststart.rar
下载下来解压得到qt-faststart.exe放到d:ffmpeg/bin/下面
运行命令:qt-faststart.exe d:/1.mp4 d:/2.mp4
最后出来的这个2.mp4就是成功的了。可以边下载边播放

 

整个解决方案经过测试是可行的 于是我在C#里面使用CMD命令来运行

     public string Test(string cmdText)
{
Stopwatch w = new Stopwatch();
w.Start();
StringBuilder sb = new StringBuilder();
string str = RunCmdForJobs(cmdText);
string[] lines = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines)
{
string[] temp = line.Split(new string[] { ": " }, StringSplitOptions.RemoveEmptyEntries);
if (temp.Length == 2)
sb.AppendFormat("{0}:{1}
", temp[0], temp[1].Trim(' '));
else if (temp.Length == 1)
sb.AppendFormat("{0}
", temp[0]);
}
//sb.Append(str);
w.Stop();
sb.AppendFormat("用时(毫秒):{0}
", w.ElapsedMilliseconds);
return sb.ToString();

}
///
/// 执行cmd命令
/// 多命令请使用批处理命令连接符:
/// /// &:同时执行两个命令
/// |:将上一个命令的输出,作为下一个命令的输入
/// &&:当&&前的命令成功时,才执行&&后的命令
/// ||:当||前的命令失败时,才执行||后的命令]]>
/// 其他请百度
///

public static string RunCmdForJobs(string cmdText)
{

StringBuilder sb = new StringBuilder();
using (Process p = new Process())
{
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.WorkingDirectory = "D:\\ffmpeg\\bin"; //这个属性是设置CMD命令在哪个路径下执行,这里绑定我的视频元数据信息处理工具的路径。
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true; //接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true; //重定向标准错误输出
p.StartInfo.CreateNoWindow = false; //不显示程序窗口
p.Start();//启动程序
//向cmd窗口写入命令
p.StandardInput.WriteLine(cmdText + "&exit");
p.StandardInput.AutoFlush = true;
//获取cmd窗口的输出信息
StreamReader reader = p.StandardOutput;//截取输出流
string line = reader.ReadLine();//每次读取一行
sb.Append(line + "\n");
while (!reader.EndOfStream)
{
line = reader.ReadLine();
sb.Append(line + "\n");
}
p.WaitForExit();//等待程序执行完退出进程
p.Close();
}
return sb.ToString();
}

  

 


推荐阅读
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • DirectShow Filter 开发指南
    本文总结了 DirectShow Filter 的开发经验,重点介绍了 Source Filter、In-Place Transform Filter 和 Render Filter 的实现方法。通过使用 DirectShow 提供的类,可以简化 Filter 的开发过程。 ... [详细]
  • web页面报表js下载,web报表软件 ... [详细]
  • 本文详细介绍了Apache POI库在处理Word (.docx) 文件时的核心模块XWPFDocument及其主要功能。文章涵盖了文档的段落、表格、页眉和页脚的处理方法,并提供了具体的代码示例。 ... [详细]
  • 本文介绍了 Python 中的基本数据类型,包括不可变数据类型(数字、字符串、元组)和可变数据类型(列表、字典、集合),并详细解释了每种数据类型的使用方法和常见操作。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 我自己做了一个网站图片的抓取,感觉速度有点慢抓取4000张图片可能得用15分钟左右的时间,我百度看用线程可以加快抓取,然后创建了5个线程抓取,但是5个线程是同步执行同样的操作一个图片就 ... [详细]
  • 本文整理了关于Sia去中心化存储平台的重要网址和资源,旨在为研究者和用户提供全面的信息支持。 ... [详细]
  • 本文通过基准测试(Benchmark)对.NET Core环境下Thrift和HTTP客户端的微服务通信性能进行对比分析。基准测试是一种评估系统或组件性能的方法,通过运行一系列标准化的测试来衡量其表现。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
author-avatar
手机用户2602931615
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有