使用ffmpeg 将mp4文件转化未hls文件
生活随笔
收集整理的這篇文章主要介紹了
使用ffmpeg 将mp4文件转化未hls文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用laravel-admin后臺先寫一個視頻上傳
protected function form(){$form = new Form(new Video());$form->text('video_title', __('Video title'));// uniqueName(隨機生成一個文件名) move(放入的文件夾)$form->file('video_url', __('Video url'))->uniqueName()->move("video");$form->number('goods_id', __('Goods id'));return $form;}寫一個控制器 用于linux定時器去調用
//視頻自動解碼public function decoder(){//獲取狀態值為0的所有數據 (數據庫表 0為未)$video = Video::where("video_status",0)->get();//給出提示 多會開始執行的轉碼echo "開始轉碼:".date("Y-m-d H:i:s");//判斷是否有數據if($video){//循環執行 因為不一定是一條數據foreach($video as $k=>$v){//獲取當前的id$id = $v->id;//開始轉碼Video::where(['id'=>$id])->update(['video_status'=>1]); //更新轉碼狀態為 1 開始轉碼//使得客戶端結束連接后,需要大量時間運行的任務能夠繼續運行。fastcgi_finish_request();//必須要有此函數否則定時任務會報錯//所需參數//當前視頻路徑$video_path = $v->video_url;//轉碼后的視頻路徑$decode_path = "video_out".$id."/";//m3u8文件名$m3u8 = $decode_path.$v->video_title.".m3u8";//分片文件名$ts = $decode_path.$v->video_title."%03d.ts";//創建文件夾 加 2>&1可以查看錯誤信息$dir = "cd storage/public/ && mkdir -p hls/$decode_path 2>&1";shell_exec($dir);//執行解碼$cmd = "cd storage/public/ && ffmpeg -i {$video_path} -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list hls/{$m3u8} -segment_time 15 hls/{$ts} 2>&1";//執行shell_exec($cmd);//獲取m3u8路徑$m3u8_path = "storage/public/hls/".$decode_path;//修改數據庫Video::where("id",$id)->update(["video_status"=>2,"video_m3u8"=>$m3u8_path]);}}linux定時任務調試時
注:linux定時任務為 crontab -e 下填入 * * * * *(對應分時日月周)
/usr/bin/curl http://local.shop1.com/decode
調試則直接復制除 * 號之外的去linux粘貼看是否有返回值即可
會報301需要去綁定ip 在/etc/hosts 下加
//xxx為自己的ip 后面為自己的域名 xxx.xxx.xxx.xxx local.shop1.com之后如果還有錯誤那就是 fastcgi_finish_request() 這個函數沒有添加
總結
以上是生活随笔為你收集整理的使用ffmpeg 将mp4文件转化未hls文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c3p0连接池的配置和简单使用
- 下一篇: Windows巡检IIS指标脚本(Pow