原文連接:http://www.fire-rain.com/blog/FFMPEG_H264_MP4php
最近作一個在線教學網的項目,須要實現上傳任意格式視頻自動爲h264標準視頻,使用html5播放。最終使用PHP+FFMPEG實現,在此將詳細解決方案分享給你們!html
php.ini
文件file_uploads = on ;//是否容許經過HTTP上傳文件的開關。默認爲ON便是開 upload_tmp_dir ;//文件上傳至服務器上存儲臨時文件的地方,若是沒指定就會用系統默認的臨時文件夾 upload_max_filesize = 1024m ;//望文生意,即容許上傳文件大小的最大值。默認爲2M,咱們設置爲1G post_max_size = 1024m ;//指經過表單POST給PHP的所能接收的最大值,咱們也設置爲1G max_execution_time = 3600 ;//每一個PHP頁面運行的最大時間值(秒),默認30秒,設置爲一小時,由於後面轉碼時間好久。 max_input_time = 36000 ;//每一個PHP頁面接收數據所需的最大時間,默認60秒 memory_limit = 8m ;//每一個PHP頁面所吃掉的最大內存,默認8M
火焰雨推薦你們使用uploadify
,Uploadify
是JQuery
的一個上傳插件,實現帶進度顯示。插件安裝簡單,此處略過。
可是有個問題須要注意,非IE瀏覽器session
會丟失,查了不少資料,最終總結的緣由是:html5
由於諸如
uploadify
採用的是flash客戶端,它產生的useragent與瀏覽器的user-agent不一樣。apache
最終解決辦法:centos
//在upmodify上傳參數中加入session參數,以下: scriptData: {"SESSION_ID":""}, // 在服務端接收頁面加入如下代碼: if(@$_REQUEST['SESSION_ID'] && ($session_id=$_REQUEST['SESSION_ID']) !=session_id()){ session_destroy(); session_id($session_id); @session_start(); }
這樣就解決了 FLASH 不能正確傳遞頁面瀏覽器
如今Linux下比較流行的視頻格式轉換軟件是FFMPEG,FFMPEG是用於錄製、截圖、轉換和流化音頻和視頻的完整解決方案,一套領先的音/視頻編解碼類庫。除了FFMPEG外,咱們要轉碼成H264格式 ,還須要一個擴展。(文章最後給出全部軟件包下載地址)服務器
centos 5.4環境下安裝源碼安裝h264擴展session
tar -xjvf x264-snapshot-20120718-2245-stable.tar.bz2 #進入解壓後的源文件目錄 cd x264-snapshot-20120718-2245-stable/ ./configure --prefix=/usr/local --enable-shared make make install //centos 5.4環境下安裝源碼安裝ffmpeg with h264擴展 tar -xjvf ffmpeg-2.1.1.tar.bz2 //進入解壓後目錄 cd ffmpeg-2.1.1 ./configure --enable-gpl --enable-libx264 make make install //從新加載配置 lcfonfig //測試是否安裝成功 ffmpeg
若是你看到如下內容說明安裝成功:ide
ffmpeg version 2.1.1 Copyright (c) 2000-2013 the FFmpeg developers built on Dec 17 2013 23:32:40 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-3) configuration: --enable-libx264 --enable-gpl libavutil 52. 48.101 / 52. 48.101 libavcodec 55. 39.101 / 55. 39.101 libavformat 55. 19.104 / 55. 19.104 libavdevice 55. 5.100 / 55. 5.100 libavfilter 3. 90.100 / 3. 90.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 17.104 / 0. 17.104 libpostproc 52. 3.100 / 52. 3.100 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... Use -h to get full help or, even better, run 'man ffmpeg'
$cmd = 'FFMPEG -i uploadfile/video/test.wmv -c:v libx264 -strict -2 uploadfile/mp4/test.mp4'; exec($cmd, $status);
運行前請確認exec函數已經開啓。不然請修改php.ini文件函數