Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 转码及;显示用户上传的视频以实现跨浏览器/平台兼容性_Php_Html_Ffmpeg_Flv_Jwplayer - Fatal编程技术网

Php 转码及;显示用户上传的视频以实现跨浏览器/平台兼容性

Php 转码及;显示用户上传的视频以实现跨浏览器/平台兼容性,php,html,ffmpeg,flv,jwplayer,Php,Html,Ffmpeg,Flv,Jwplayer,我想在不同的浏览器/平台上以高质量显示用户上传的视频。我想我有一个很好的开始,但有几个问题。我可以使用ffmpeg 0.10(从PHP调用)和jwPlayer 5.8(许可) 理想情况下,我想支持: 使用Flash9的浏览器+ 没有Flash的现代Firefox/Chrome/Safari iOS 4.1+ 安卓2.2+ 我当前的转码命令是: $commands = array( 'flv' => "/usr/bin/ffmpeg -y -i {$sourceFile} -b

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

理想情况下,我想支持:

  • 使用Flash9的浏览器+
  • 没有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>

swfobject.embeddeswf(
“/flash/jwPlayer.swf”,
“视频”,
{$width},
{$height},
'9.0.0',
'',
{
文件:“{$fileFLV}”,
宽度:{$width},
高度:{$height},
提供商:“视频”,
拉伸:“均匀”,
平滑:“真”,
被告:“真的”
},
{
菜单:“错误”,
allowfullscreen:'真',
allowscriptaccess:“始终”,
allownetworking:“始终”,
wmode:'透明'
}
);
我们的想法是更喜欢Flash播放器(我们有许多自定义皮肤,我们希望继续使用),然后回到HTML 5视频,如果失败,则显示带有mp4文件链接的JPEG(这似乎是iOS 2/3和旧浏览器的最后努力,这样他们至少可以通过启动QuickTime来播放视频)

目前我不确定如何解决的主要问题是:

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