जावास्क्रिप्ट को परिवर्तित करने के लिए php को [1] शुरू करना चाहिए और फिर [2] ...
[1]php: शुरू रूपांतरण और एक textfile करने के लिए स्थिति लिखने - उदाहरण वाक्य रचना:
exec("ffmpeg -i path/to/input.mov path/to/output.flv 1>path/to/output.txt 2>&1");
दूसरे भाग के लिए हम सिर्फ जावास्क्रिप्ट आवश्यकता को पढ़ने के लिए फ़ाइल। निम्न उदाहरण AJAX के लिए dojo.request का उपयोग करता है, लेकिन आप के रूप में अच्छी jQuery या वेनिला या जो कुछ भी इस्तेमाल कर सकते हैं:
[2]js: हड़पने फ़ाइल से प्रगति:
var _progress = function(i){
i++;
// THIS MUST BE THE PATH OF THE .txt FILE SPECIFIED IN [1] :
var logfile = 'path/to/output.txt';
/* (example requires dojo) */
request.post(logfile).then(function(content){
// AJAX success
var duration = 0, time = 0, progress = 0;
var result = {};
// get duration of source
var matches = (content) ? content.match(/Duration: (.*?), start:/) : [];
if(matches.length>0){
var rawDuration = matches[1];
// convert rawDuration from 00:00:00.00 to seconds.
var ar = rawDuration.split(":").reverse();
duration = parseFloat(ar[0]);
if (ar[1]) duration += parseInt(ar[1]) * 60;
if (ar[2]) duration += parseInt(ar[2]) * 60 * 60;
// get the time
matches = content.match(/time=(.*?) bitrate/g);
console.log(matches);
if(matches.length>0){
var rawTime = matches.pop();
// needed if there is more than one match
if (lang.isArray(rawTime)){
rawTime = rawTime.pop().replace('time=','').replace(' bitrate','');
} else {
rawTime = rawTime.replace('time=','').replace(' bitrate','');
}
// convert rawTime from 00:00:00.00 to seconds.
ar = rawTime.split(":").reverse();
time = parseFloat(ar[0]);
if (ar[1]) time += parseInt(ar[1]) * 60;
if (ar[2]) time += parseInt(ar[2]) * 60 * 60;
//calculate the progress
progress = Math.round((time/duration) * 100);
}
result.status = 200;
result.duration = duration;
result.current = time;
result.progress = progress;
console.log(result);
/* UPDATE YOUR PROGRESSBAR HERE with above values ... */
if(progress==0 && i>20){
// TODO err - giving up after 8 sec. no progress - handle progress errors here
console.log('{"status":-400, "error":"there is no progress while we tried to encode the video" }');
return;
} else if(progress<100){
setTimeout(function(){ _progress(i); }, 400);
}
} else if(content.indexOf('Permission denied') > -1) {
// TODO - err - ffmpeg is not executable ...
console.log('{"status":-400, "error":"ffmpeg : Permission denied, either for ffmpeg or upload location ..." }');
}
},
function(err){
// AJAX error
if(i<20){
// retry
setTimeout(function(){ _progress(0); }, 400);
} else {
console.log('{"status":-400, "error":"there is no progress while we tried to encode the video" }');
console.log(err);
}
return;
});
}
setTimeout(function(){ _progress(0); }, 800);
यह अजीब और अक्षम हो जाएगा में पाया है, लेकिन मुझे लगता है कि आप एक के लिए ffmpeg उत्पादन रीडायरेक्ट करने के लिए सक्षम होना चाहिए tempfile, जिसे php द्वारा पढ़ा जा सकता है। मैं जल्द ही प्रतीक्षा सूचक के लिए जाना होगा - बहुत आसान है। –