需求痛点:最近接到产品的需求,说到需求的痛点:预览视频多用于前端展示,过大影响端内加载体验,且造成更多存储费用。
目标:需要对预览视频压缩,并且要保证视频的质量。
预览视频业务存在哪些业务:
在数字化时代,随着视频内容的增多和文件大小的增加,对于服务器和网络资源的压力也越来越大。为了解决这个问题,我们进行了调研,并尝试使用明眸算法实现了视频预览压缩技术。
在调研阶段,我们发现明眸算法在视频压缩领域有着很好的声誉。该算法能够在保证视频画质的前提下,显著减小视频文件的大小。因此,我们决定尝试使用明眸算法来解决我们面临的视频预览压缩问题。
通过用户调研和讨论,我们明确了以下需求:
普通转码和极速高清对视频压缩的比例差不多,是原视频的 15% 左右;
个别的提供的定制参数效果会更好,达到 **5%**。
不过定制参数转码后选择的分辨率是 1280 * 720,另外两种默认提供的压缩方式是 1920 *1080。
腾讯明眸会根据视频的 分辨率 和 时长 进行按量收费,并且不同的算法单价也会有所不同。定制参数的收费标准与极速高清一样,总体而言,费用非常低。
按照当前预估每月处理 180 分钟的 1080p 视频来计算,每月成本如下
预览视频 文件大小减少90%左右,单个文件平均30M~50M降低到3M~5M。
明眸视频压缩算法的时序图:
压缩状态设计:
`mps_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '明眸视频对 video_url 压缩处理状态: 0不需要压缩; 1 需要压缩; 2 压缩中; 3 压缩完成; 4 压缩出错'
在明眸压缩算法实现的第一步,用户享有选择权,可以通过勾选来预览即将压缩的视频。
未勾选:mps_status=0;
勾选完成后,提交,mps_status=1;
通过后台定时脚本刷新压缩状态,将视频处理状态标记为已完成(mps_status=2)是一种有效的方式来及时更新用户的视频压缩状态。
这样的定时脚本可以定期检查压缩任务的进度,并在任务完成后更新数据库中的状态信息,以便用户可以及时得知其视频压缩的最新状态。
部分核心代码:
<?php
class OSS {
public function uploadFile($localFilePath) {
// 上传文件至OSS,生成链接
// 这里简化为直接返回OSS链接
return "https://your-oss-bucket.com/video.mp4";
}
}
class Application {
public function main() {
$oss = new OSS();
$ossLink = $oss->uploadFile("/path/to/local/video.mp4");
// 将OSS链接发送给明眸算法
$this->sendToAlgorithm($ossLink);
}
public function sendToAlgorithm($ossLink) {
// 将OSS链接发送给明眸算法进行压缩处理
// 这里简化为直接输出链接
echo "视频已上传至明眸算法进行压缩处理:" . $ossLink;
// 明眸算法处理完成后,生成新的回调地址
$callbackUrl = $this->generateCallbackUrl();
echo "压缩完成后的回调地址:" . $callbackUrl;
}
public function generateCallbackUrl() {
// 生成新的回调地址
// 这里简化为直接返回一个固定的地址
return "https://your-server.com/callback";
}
}
// 在主程序中执行
$app = new Application();
$app->main();
?>
保存压缩后的视频文件至服务器,进行下载,上传到static地址
在处理完压缩后的视频文件并生成新文件后,删除原文件是一个常见的操作。
这可以帮助释放服务器存储空间,同时确保只有最新的压缩后视频文件被保留。
部分核心代码:
<?php
class Application {
public function handleCallback($compressedVideoUrl, $originalVideoPath) {
// 下载压缩后的视频文件到本地
$compressedVideoPath = $this->downloadVideo($compressedVideoUrl);
// 处理压缩后的文件(可选)
$this->provideDownloadLink($compressedVideoPath);
// 删除原文件
$this->deleteOriginalFile($originalVideoPath);
}
public function downloadVideo($videoUrl) {
// 下载压缩后的视频文件到本地
// 这里简化为直接返回文件路径
return "path/to/compressed_video.mp4";
}
public function provideDownloadLink($compressedVideoPath) {
// 提供下载链接或存储文件
// 这里简化为直接输出文件路径
echo "压缩后的视频文件已生成:" . $compressedVideoPath;
}
public function deleteOriginalFile($filePath) {
// 删除原文件
unlink($filePath);
echo "原文件已删除:" . $filePath;
}
}
// 在回调处理程序中执行
$app = new Application();
// 假设这里传入了压缩后的视频文件链接和原视频文件路径
$app->handleCallback("https://your-server.com/compressed_video.mp4", "/path/to/original_video.mp4");
?>
经过我们团队的不懈努力,我们成功地实现了视频预览压缩技术,并通过明眸算法将视频文件的大小从30MB减少到3MB~5MB。
这一技术的实现极大地减轻了服务器的内存使用,提高了视频预览的加载速度,为用户提供了更加流畅和快速的预览体验。
在这个项目中,我们不仅解决了实际问题,还学到了许多宝贵的经验和教训。我们将继续努力,不断改进和优化这一技术,为用户提供更好的服务和体验。
END
革命尚未成功,同志仍需努力,冲冲冲