m3u8是一種索引文件,本質上是存放的對應服務器上的視頻網絡地址。微信小程序使用這種作爲視頻源可以完美解決卡頓的問題。
手機上傳到服務器的視頻大部分格式是mp4的,這裏服務器可以把mp4轉換成m3u8.
<?php
require_once 'dbModel.php';
$db=new dbModel();
if(is_uploaded_file($_FILES['file']['tmp_name'])){
$fileName=explode('.',$_FILES['file']['name']);
$fileExt=end($fileName);
if(!in_array($fileExt,array('3gp','rmvb','flv','wmv','avi','mkv','mp4','mp3','wav'))){
$result=array(
"status"=>false,
"msg"=>'上傳的文件類型不對!!'
);
echo json_encode($result);
}
$fileName=md5(uniqid(md5(microtime(true)),true)).'.'.$fileExt;
$filesPath='uploadFiles\\'.date("Ym").'\\';
createFolder($filesPath);
if(move_uploaded_file($_FILES['file']['tmp_name'],$filesPath.$fileName)){
$tsfileName=md5(uniqid(md5(microtime(true)),true)).'.'.'ts';
$m3u8fileName=md5(uniqid(md5(microtime(true)),true)).'.m3u8';
$chg_str = "ffmpeg -y -i ".$filesPath.$fileName." -vcodec copy -acodec copy -vbsf h264_mp4toannexb ".$filesPath.$tsfileName;
exec($chg_str);
$pic_str = "ffmpeg -i ".$filesPath.$tsfileName." -c copy -map 0 -f segment -segment_list ".$filesPath.$m3u8fileName." -segment_time 5 ".$filesPath.'-%3d.ts';
exec($pic_str);
$db->insert("videoTable", [
"videoUrl" => $filesPath.$m3u8fileName
]);
$account_id = $db->id();
$result=array(
"status"=>true,
"msg"=>'成功!'.$account_id,
"data"=>$filesPath.$fileName
);
echo json_encode($result);
}else{
$result=array(
"status"=>false,
"msg"=>'失敗!'
);
echo json_encode($result);
}
}
function createFolder($path,$mode = 0777){
return is_dir($path) or (createFolder(dirname($path))) and mkdir($path,$mode);
}