2

我想在不同的浏览器/平台上以高质量显示用户上传的视频。我认为我有一个很好的开始,但也有一些问题。我可以使用 ffmpeg 0.10(从 PHP 调用)和 jwPlayer 5.8(许可)。

理想情况下,我想支持:

  • 带有 Flash 9+ 的浏览器
  • 没有 Flash 的现代 Firefox/Chrome/Safari
  • iOS 4.1+
  • 安卓 2.2+

我当前的转码命令是:

$commands = array(
    'flv' => "/usr/bin/ffmpeg -y -i {$sourceFile} -b 500k -ar 22050 -ab 64 {$tmpFileName}.flv 2>&1",
    'webm' => "/usr/bin/ffmpeg -i {$sourceFile} -acodec libvorbis -ac 2 -ab 96k -ar 44100 -b 500k {$tmpFileName}.webm 2>&1",
    'mp4' => "/usr/bin/ffmpeg -i {$sourceFile} -acodec libfaac -ab 96k -vcodec libx264 -level 21 -refs 2 -vf 'scale=trunc(ih*a/2)*2:trunc(iw/a/2)*2' -b 500k -bt 1000k -threads 0 -f mp4 {$tmpFileName}.pre.mp4 2>&1",
    'jpg' => "/usr/bin/ffmpeg -y -i {$sourceFile} -ss 5 -vcodec mjpeg -vframes 1 -an -f rawvideo {$tmpFileName}.jpg 2>&1"
);

$fastStartCommand = "/usr/bin/qt-faststart {$tmpFileName}.pre.mp4 {$tmpFileName}.mp4");

我当前的显示代码是这样的:

<video id="video" controls="controls" width="{$width}" height="{$height}" poster="{$fileJPG}" style="width: {$width}px; height: {$height}px;">
    <source src="{$fileMP4}" type="video/mp4" data-ext="mp4" />
    <source src="{$fileWEBM}" type="video/webm" data-ext="webm" />
    <a href="{$fileMP4}" title="Play Video">
        <img border="0" src="{$fileJPG}" width="{$width}" height="{$height}" alt="Play Video" />
    </a>
</video>
<script type="text/javascript">
swfobject.embedSWF(
    '/flash/jwPlayer.swf',
    'video',
    {$width},
    {$height},
    '9.0.0',
    '',
    {
        file: '{$fileFLV}',
        width: {$width},
        height: {$height},
        provider: 'video',
        stretching: 'uniform',
        smoothing: 'true',
        dock: 'true'
    },
    {
        menu: 'false',
        allowfullscreen: 'true',
        allowscriptaccess: 'always',
        allownetworking: 'always',
        wmode: 'transparent'
    }
);
</script>

我们的想法是更喜欢 Flash 播放器(我们有许多想要继续使用的自定义皮肤),然后回退到 HTML 5 视频,如果失败,则显示带有 mp4 文件链接的 JPEG(这似乎作为 iOS 2/3 和旧版浏览器的最后努力,它们至少可以通过启动 QuickTime 来播放视频)。

我现在不确定如何解决的主要问题是:

  • 如何在 Flash 中显示更高质量的视频?我尝试使用 mp4 视频而不是 flv,但它不起作用,我只听到声音,没有视频。我认为 Flash 现在应该支持 h.264,但是如何?我是否必须对旧版和新版 Flash 使用不同的转码方法?
  • 如何以更好的质量对视频进行转码?现在我对所有分辨率都使用相同的比特率。ffmpeg有没有办法自动调整比特率?或者我可以以某种方式检测上传视频的分辨率并将其与分辨率列表 - >比特率匹配吗?
4

0 回答 0