Php 转码及;显示用户上传的视频以实现跨浏览器/平台兼容性
我想在不同的浏览器/平台上以高质量显示用户上传的视频。我想我有一个很好的开始,但有几个问题。我可以使用ffmpeg 0.10(从PHP调用)和jwPlayer 5.8(许可) 理想情况下,我想支持: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
- 使用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有没有办法自动调整比特率?或者我可以检测上传视频的分辨率并将其与分辨率->比特率列表进行匹配吗