1. 下载ffmpeg
去我的另一篇博客,ffmpeg 下载和安装
2. 使用 openssl 生成密钥文件
去我的另一篇博客 Windows 中使用 OpenSSL 生成用于加密的密钥文件
3. Asp.Net WebAPI 中代码示例
将上面的ffmpeg.exe 、 enc.key 、enc.keyinfo 文件丢到自己的项目中的 资源文件目录中 一般是 Content 文件夹下面
因为这里时weiapi中的代码,所有的路径建议为物理路径(因为本人用相对路径测试的时候没通过)
/// <summary>
/// 视频切片加密
/// </summary>
/// <returns>返回加密文件的路径</returns>
public string VideoSlicerEncrpty()
{
using (Process process = new Process())
{
// 进程信息
ProcessStartInfo startInfo = new ProcessStartInfo();
// ffmpeg 工具的文件路径
startInfo.FileName = Server.MapPath($"ffmpeg.exe");
// 源文件的路径
string videoInput = Server.MapPath($"input.mp4");
// 加密信息文件
string keyinfoFile = Server.MapPath($"enc.keyinfo");
// 加密切片的文件名称的前缀
string prefixNameFile = Server.MapPath($"output");
// 指令参数
startInfo.Arguments = $"-i {videoInput} " + // -i 指定输入的视频
$"-c:v h264 " + // -c:v 指定视频的编码格式
$"-b:v 2M " + // -b:v 指定视频的码率,这里是2M比特率
$"-hls_time 15 " + // 指定分片的时间,单位是秒
$"-hls_list_size 0 " +// -hls_list_size 指定hls列表的数量,(0:不限制)
$"-hls_key_info_file {keyinfoFile} " + // -hls_key_info_file 加密的信息文件 (enc.keyinfo)
$"-hls_segment_filename {prefixNameFile}_%03d.ts " + // -hls_segment_filename 指定输出的ts文件名字,这里表示是output_ + 3位数字
$"{prefixNameFile}.m3u8 " + // output.m3u8指定输出m3u8文件的名字
$"-y "; // -y有些场景,比如是否覆盖,直接选择是,避免程序卡住
startInfo.RedirectStandardOutput = true;// 将标准输出重定向到Process.StandardOutput属性
startInfo.UseShellExecute = false; // 不使用操作系统外壳程序启动线程
startInfo.CreateNoWindow = true; // 不创建进程窗口
process.StartInfo = startInfo;
process.Start(); // 启动进程
process.WaitForExit(); // 线程阻塞
string output = process.StandardOutput.ReadToEnd(); // 读取输出内容
Debug.WriteLine("读取输出内容: \n" + output);
process.Close();
process.Dispose();
string outVideoPath = $"{prefixName}.m3u8";
return outVideoPath;
}
}