За последние 24 часа нас посетили 19378 программистов и 1582 робота. Сейчас ищут 958 программистов ...

Сохранение потокового видео

Тема в разделе "PHP для новичков", создана пользователем dimpase, 3 апр 2016.

  1. dimpase

    dimpase Guest

    Доброго вечера,ночи, о великие гуру!
    Столкнулся с такой проблемой,- нужно сохранять средствами php стрим поток с IP камеры.
    Поток сам забирать научился с камеры и сохранять в файл в виде
    Код (Text):
    1. header('Content-Type:multipart/x-mixed-replace;boundary=object-ipcamera');
    Сами кадры выглядят следующим образом
    Код (Text):
    1.  
    2.  
    3. HTTP/1.1 200 OK
    4. Date: Fri Apr  1 19:33:58 2016
    5. Server: GoAhead-Webs
    6. Accept-Ranges: bytes
    7. Connection: close
    8. Content-Type: multipart/x-mixed-replace;boundary=object-ipcamera
    9.  
    10. --object-ipcamera
    11. Content-Type:image/jpeg
    12. Content-Length:18476
    13.  
    14. яШяа........ тра ля ля дальше идут данные картинки
    1. Сам файл получается очень объемным(пробывал пользоваться командами puck, но ....)
    2. Пытаюсь сохранить сами кадры для их дальнейшего puck :), упаковки, но в браузере у меня потом пишет что изображение повреждено.
    кадры отрезаю по boundary

    Код (Text):
    1. preg_match('/Content-Length:(.*)\r\n(.*)\r\n--object-ipcamera/isU', $str,$st);
    Сравниваю полученную строку с той которая приходит в оригинале(кадром) ф-ей
    Код (Text):
    1. strlen
    , она всегда любой сохраненный кадр увеличивает на 2, допустим оригинальный кадр составляет 1384 симола а сохраненный на 2 символа больше. Плюс к тому же при сохранении кадра в файл символы все меняются, хотя кодировка установлена одинаковая.
    Что посоветуете? сильно не ругайте я маленький :)
    Само видео транслируется норм, а вот сохранить его не могу.:(((

    весь код
    Код (Text):
    1.  
    2. header('Content-Type:multipart/x-mixed-replace;boundary=object-ipcamera'); // JPG picture
    3. //header('Connection: Close');
    4. //header('Content-Type: image/jpeg'); // JPG picture
    5. //header('Content-Type: text/html'); // JPG picture
    6. //header('Authorization: Basic '.base64_encode($user.':'.$pass));
    7. $fp = fsockopen($ip, $port, $errno, $errstr, 30);
    8. if(!$fp) {
    9.   echo $errstr.' ('.$errno.')<br />'."\n";
    10. } else {
    11.     $file = 'video.dimpase';
    12.     $str='';
    13.   $urlstring = "GET /videostream.cgi HTTP/1.0\r\nAuthorization: BASIC ".base64_encode($user.':'.$pass)."\r\n\r\n";
    14.   fputs($fp, $urlstring);
    15.       $str=MYfread($fp,250500);
    16.       //file_put_contents($file, $str, FILE_APPEND | LOCK_EX);
    17.       preg_match('/Content-Length:(.*)\r\n(.*)\r\n--object-ipcamera/isU', $str,$st);
    18.     echo $st[2];
    19.    
    20. }
    21.  
    22. function MYfread($fp,$len)
    23. {
    24.         $answer=''; $str='a';
    25.         while ($len>0 && $str)
    26.         {
    27.                 $str=fread($fp,$len);
    28.                 $answer.=$str;
    29.                 $len-=strlen($str);
    30.         }
    31.         return $answer;
    32. }