function WriteFragment($download, &$opt)
 {
     $this->frags[$download['id']] = $download;
     $available = count($this->frags);
     for ($i = 0; $i < $available; $i++) {
         if (isset($this->frags[$this->lastFrag + 1])) {
             $frag = $this->frags[$this->lastFrag + 1];
             if ($frag['response'] !== false) {
                 LogDebug("Writing fragment " . $frag['id'] . " to flv file");
                 if (!isset($opt['file'])) {
                     $opt['debug'] = false;
                     if ($this->play) {
                         $outFile = STDOUT;
                     } else {
                         if ($this->outFile) {
                             if ($opt['filesize']) {
                                 $outFile = JoinUrl($this->outDir, $this->outFile . '-' . $this->fileCount++ . ".flv");
                             } else {
                                 $outFile = JoinUrl($this->outDir, $this->outFile . ".flv");
                             }
                         } else {
                             if ($opt['filesize']) {
                                 $outFile = JoinUrl($this->outDir, $this->baseFilename . '-' . $this->fileCount++ . ".flv");
                             } else {
                                 $outFile = JoinUrl($this->outDir, $this->baseFilename . ".flv");
                             }
                         }
                     }
                     $this->InitDecoder();
                     $this->DecodeFragment($frag['response'], $frag['id'], $opt);
                     $opt['file'] = WriteFlvFile($outFile, $this->audio, $this->video);
                     if ($this->metadata) {
                         WriteMetadata($this, $opt['file']);
                     }
                     $opt['debug'] = $this->debug;
                     $this->InitDecoder();
                 }
                 $flvData = $this->DecodeFragment($frag['response'], $frag['id'], $opt);
                 if (strlen($flvData)) {
                     $status = fwrite($opt['file'], $flvData, strlen($flvData));
                     if (!$status) {
                         LogError("Failed to write flv data");
                     }
                     if (!$this->play) {
                         $this->filesize = ftell($opt['file']) / (1024 * 1024);
                     }
                 }
                 $this->lastFrag = $frag['id'];
             } else {
                 $this->lastFrag += 1;
                 LogDebug("Skipping failed fragment " . $this->lastFrag);
             }
             unset($this->frags[$this->lastFrag]);
         } else {
             break;
         }
         if ($opt['tDuration'] and $opt['duration'] + $this->duration >= $opt['tDuration']) {
             LogInfo("");
             LogInfo($opt['duration'] + $this->duration . " seconds of content has been recorded successfully.", true);
             return STOP_PROCESSING;
         }
         if ($opt['filesize'] and $this->filesize >= $opt['filesize']) {
             $this->filesize = 0;
             $opt['duration'] += $this->duration;
             fclose($opt['file']);
             unset($opt['file']);
         }
     }
     if (!count($this->frags)) {
         unset($this->frags);
     }
     return true;
 }
Exemple #2
0
        // Create flv tag
        $flvTag = " ";
        WriteByte($flvTag, 0, 8);
        WriteInt24($flvTag, 1, $rawLength + strlen($codecTag));
        WriteFlvTimestamp($flvTag, 0, $time);
        WriteInt24($flvTag, 8, 0);
        // Write flv tag footer
        $audioTag = $flvTag . $codecTag . $data;
        WriteInt32($audioTag, strlen($audioTag), strlen($audioTag));
        if ($config) {
            $aacCfgW ? $audioTag = "" : ($aacCfgW = true);
        }
        $flvData .= $audioTag;
    }
    $filePos += $dataLength;
    $cFilePos = floor($filePos / (1024 * 1024));
    if ($cFilePos > $pFilePos) {
        LogInfo(sprintf("Processed %d/%.2f MB", $cFilePos, $fileSize), true);
        $pFilePos = $cFilePos;
    }
}
// Write output file
if (!is_resource($flv)) {
    $flv = WriteFlvFile($outFile);
}
fwrite($flv, $flvData);
fclose($flv);
$timeEnd = microtime(true);
$timeTaken = sprintf("%.2f", $timeEnd - $timeStart);
LogInfo(sprintf("Processed input file in %s seconds", $timeTaken));
LogInfo("Finished");