Bueno llevo ya varias semanas tratando de resolver un problema que se me presento con ffmpeg , el problema es que al momento de realizar la conversion de un video de cualquier formato a MP4,OGG y WEBM, el MP4 no se visualiza en ningun navegador , y pues es necesario ya que IE solo acepta videos en formato MP4. Al principio ffmpeg creaba archivos vacios , ahora si tienen contenido, ya que se pueden visualizar con cualquier reproductor de videos. El servidor desde el cual se realiza la conversion esta en Linux SUSE, pero el sistema estaen windows 7, no se si exista algun problema al momento de traer los archivos desde el servidor para mostrarlos por medio de codigo PHP y HTML.
Código en php que ejecuta ffmpeg para la conversión de vídeos a los formatos OGG, WEBM y MP4 y realiza la inserción de las rutas a una tabla de una base de datos en oracle.
Código PHP:
/*esta funcion realiza la conversion de los videos a los 3 formatos (OGG,WEBM,MP4) recibiendo como parametro la ruta origen y la ruta final
y el formato al que se debe convertit*/
function convertirVideo($rutaConvertir,$rutaFinal,$formato){
echo shell_exec("ffmpeg -y -i $rutaConvertir -s 720x480 $rutaFinal{$formato} >/dev/null 2>/dev/null &");
return $bandera=true;
}
/*Esta funcion inserta la ruta final de un video ya convertido dependiendo del tipo de video*/
function insertar($idNuevo,$rutaConvertirSinPuntos,$columna,$ruta,$newIdArchivo){
if($columna==" "){
$query_sql = "insert into FO04(FO04_ID,FO04_RUTACONVERTIR,FO04_ID_ARCHIVO)VALUES($idNuevo,'$rutaConvertirSinPuntos',$newIdArchivo)";
}
else{
$query_sql = "insert into FO04(FO04_ID,FO04_RUTACONVERTIR,$columna,FO04_ID_ARCHIVO)VALUES($idNuevo,'$rutaConvertirSinPuntos','$ruta',$newIdArchivo)";
}
echo $query_sql;
query_bd($query_sql);
}
/*Arreglos que contienen los formatos en los que se convertira el video*/
$formatos= Array (".ogg",".webm",".mp4");
$formatosConvertirMP4= Array (".ogg",".webm");
$formatosConvertirOGG= Array (".webm",".mp4");
$formatosConvertirWEBM= Array (".ogg",".mp4");
//compara si el video es admitido o no
if (in_array($extension, $extensionesVIDEOS))
{ /*COMIENZAN LAS COMPARACIONES DE VIDEOS*/
if ($tipoVideo != "mp4" && $tipoVideo != "ogg" && $tipoVideo != "webm")
{ if (move_uploaded_file($_FILES["archivo"]["tmp_name"], $rutaConvertir))
{ $rutaConvertirSinPuntos = substr("$rutaConvertir", 3);
insertar($idNuevo,$rutaConvertirSinPuntos," "," ",$newIdArchivo);
ocicommit($conexion);
echo "El archivo " . $nombreCompleto . " se ha subido.";
$rutaFinal = "../subidas/$nombre";//esta es la ruta final en el servidor
$rutaFinal22 = "subidas/$nombre";//esta es la ruta final en el servidor
$columnasParaTODOS=Array("FO04_RUTASERVIDOR_OGG","FO04_RUTASERVIDOR_WEBM","FO04_RUTASERVIDOR_MP4");
for($i = 0; $i < count($formatos); ++$i){
$bandera=convertirVideo($rutaConvertir,$rutaFinal,$formatos[$i]);
if($bandera==true){
$rt = substr("$rutaFinal{$formatos[$i]}", 3);
updateRuta($columnasParaTODOS[$i],$rt,$idNuevo);
ocicommit($conexion);}
else
{
echo "Error al convertir el video";
}
}
}
else{echo "Ocurrió un error al subir el video!!.";}
}
else
{
if ($tipoVideo == "mp4")
{
if (move_uploaded_file($_FILES["archivo"]["tmp_name"], $target_file))
{
$rutaFinalServidorSinPuntos = substr("$target_file", 3);
insertar($idNuevo,$rutaFinalServidorSinPuntos,"FO04_RUTASERVIDOR_MP4",$rutaFinalServidorSinPuntos,$newIdArchivo);
ocicommit($conexion);
echo "El archivo " . $nombreCompleto . " se ha subido.";
$rutaFinal2 = "../subidas/$nombre";//esta es la ruta final en el servidor
$columnasParaMP4=Array("FO04_RUTASERVIDOR_OGG","FO04_RUTASERVIDOR_WEBM");
for($i = 0; $i < count($formatosConvertirMP4); ++$i)
{
$bandera=convertirVideo($target_file,$rutaFinal2,$formatosConvertirMP4[$i]);
if($bandera==true)
{
$rt2 = substr("$rutaFinal2{$formatosConvertirMP4[$i]}", 3);
updateRuta($columnasParaMP4[$i],$rt2, $idNuevo);
ocicommit($conexion);
}
else
{
echo "Error al convertir el video";
}
}
}
else
{
echo "Ocurrió un error al subir el video!!.";
}
}
else
{
if ($tipoVideo == "ogg" || $tipoVideo == "webm")
{
if ($tipoVideo == "ogg")
{
if (move_uploaded_file($_FILES["archivo"]["tmp_name"], $target_file))
{
$rutaFinalServidorSinPuntos2 = substr("$target_file", 3);
insertar($idNuevo,$rutaFinalServidorSinPuntos2,"FO04_RUTASERVIDOR_OGG",$rutaFinalServidorSinPuntos2,$newIdArchivo);
ocicommit($conexion);
echo "El archivo " . $nombreCompleto . " se ha subido.";
$rutaFinal3 = "../subidas/$nombre";//esta es la ruta final en el servidor
$columnasParaOGG=Array("FO04_RUTASERVIDOR_WEBM","FO04_RUTASERVIDOR_MP4");
for($i = 0; $i < count($formatosConvertirOGG); ++$i)
{
$bandera=convertirVideo($target_file,$rutaFinal3,$formatosConvertirOGG[$i]);
if($bandera==true)
{
$rt3 = substr("$rutaFinal3{$formatosConvertirOGG[$i]}", 3);
updateRuta($columnasParaOGG[$i],$rt3, $idNuevo);
ocicommit($conexion);
}
else
{
echo "Error al convertir el video";
}
}
}
else
{
echo "Error al convertir el video";
}
}
else
{
if ($tipoVideo == "webm")
{
if (move_uploaded_file($_FILES["archivo"]["tmp_name"], $target_file))
{
$rutaFinalServidorSinPuntos3 = substr("$target_file", 3);
insertar($idNuevo,$rutaFinalServidorSinPuntos3,"FO04_RUTASERVIDOR_WEBM",$rutaFinalServidorSinPuntos3,$newIdArchivo);
ocicommit($conexion);
echo "El archivo " . $nombreCompleto . " se ha subido.";
$rutaFinal4 = "../subidas/$nombre";//esta es la ruta final en el servidor
$columnasParaWEBM=Array("FO04_RUTASERVIDOR_OGG","FO04_RUTASERVIDOR_MP4");
for($i = 0; $i < count($formatosConvertirWEBM); ++$i)
{
$bandera=convertirVideo($target_file,$rutaFinal4,$formatosConvertirWEBM[$i]);
if($bandera==true)
{
$rt4 = substr("$rutaFinal4{$formatosConvertirWEBM[$i]}", 3);
updateRuta($columnasParaWEBM[$i],$rt4, $idNuevo);
ocicommit($conexion);
}
else
{
echo "Error al convertir el video";
}
}
}
else
{
echo "Ocurrió un error al subir el video!!.";
}
}
}
}
}
}
}
?>
Parte del código en PHP que extrae las rutas de los videos de una tabla de BD y los muestra a través de la etiqueta vídeo de html.
Código PHP:
if ($TIPO_EXTENSION == "video") {
$query_sql2 = " SELECT FO04_RUTASERVIDOR_MP4, FO04_RUTASERVIDOR_OGG, FO04_RUTASERVIDOR_WEBM FROM FO04 WHERE FO04_ID_ARCHIVO = $ID_ARCHIVO";
$resultado2 = query_bd($query_sql2);
if ($resultado2) {
while (($row2 = oci_fetch_array($resultado2, OCI_ASSOC)) != false) {
$RUTA_VIDEO = $row2["FO04_RUTASERVIDOR_MP4"];
$RUTA_OGG = $row2["FO04_RUTASERVIDOR_OGG"];
$RUTA_WEBM = $row2["FO04_RUTASERVIDOR_WEBM"];
echo "<center><video id='imgTemaDesplegado' controls>";
if($RUTA_VIDEO!=null){
echo "<source src='$RUTA_VIDEO' type=\"video/mp4\">";
}
if($RUTA_OGG!=null){
echo "<source src='$RUTA_OGG' type=\"video/ogg\">";
}
if($RUTA_WEBM!=null){
echo "<source src='$RUTA_WEBM' type=\"video/webm\">";
}
echo "Your browser does not support the video tag.</video></center>";
}
}
}
Para terminar debo mencionar que con los formatos OGG y WEBM no existen problemas de visualizacion solo es con el MP4.
De antemano gracias y espero que puedan ayudarme resolviendo las dudas que tengo y o proporcionando informacion que sea de mi ayuda