我正在创建一个CMS,用户可以上传视频以便在页面上显示 .

上传视频时,我创建了一个后台任务(使用Hangfire)将视频转换为MP4,OGV和WEBM .

我在我的开发机器上运行最新版本的Firefox和Chrome . 根据Wikipedia,这些浏览器应完全支持H.264(MP4),Theora(OGG)和VP8 / VP9(WEBM) .

一切似乎都在Firefox中正常工作,并在本地使用VLC Media Player . 但是,使用Chrome时,当我尝试将现有视频(带有H.264视频和MPEG-2/4音频的MP4)转换为HTML5视频所需的三种格式时,我的结果会大不相同 .

图书馆

使用MediaToolkitNReco.VideoConverter,生成的MP4和OGG / OGV文件无法在Chrome中播放(尽管WEBM正在运行) . 这是我的实现:

// MediaToolkit
using (var engine = new Engine())
{
    engine.Convert(new MediaFile("C:\SourceFile.mp4"), new MediaFile("C:\DestinationFile.mp4"));
}
// NReco.VideoConverter
var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
ffMpeg.ConvertMedia("C:\SourceFile.mp4", "C:\DestinationFile.mp4", Format.mp4);

尽管看起来具有相同的编解码器,但得到的mp4在Chrome中不起作用 . 以下是原始文件和转换文件的详细信息:

工作原始上传

视频

  • 编解码器:H.264 / AVC

  • 比特率:3954 kbps

  • 画面尺寸:1920 x 1080像素

  • 帧率:29.97 fps
    AUDIO

  • 编解码器:MPEG-2/4音频

  • 采样率:44100 Hz 16位

  • 样本大小:16位

  • 比特率:125.82 kbps

  • Channels :2

转换后的非工作视频

视频

  • 编解码器:H.264 / AVC

  • 画面尺寸:1920 x 1080像素

  • 帧率:29.97 fps

  • 比特率:1909 kbps

AUDIO

  • 编解码器:MPEG-2/4音频

  • 采样率:44100 Hz

  • 样本大小:16位

  • 比特率:124.81 kbps

  • Channels :2

如您所见,输入和输出文件看起来是相同的 . 但是,输出在Chrome中无效 .

在线转换器

为什么这个过程如此困难?我错过了一个简单的解决方案?