2011-11-25 1 views
0

VCL을 사용하여 내 로컬 호스트에 브로드 캐스트하고 UDP (레거시) 방식으로 127.0.0.1로 전송합니다. 트래픽을 잡기 위해, 나는이 코드를 사용합니다 - 물론, 결과는 좀 지저분하다PhP로 생성 된 VLC로 MP4를 생성했습니다. 다소 엉망입니다.

$address = '127.0.0.1'; 
$port = 1234; 
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
socket_bind($sock, $address, $port) or die('Could not bind to address'); 
$f = fopen ('output', 'w'); 
fclose ($f); 
$sock = stream_socket_server('udp://127.0.0.1:1234', $errno, $errstr, STREAM_SERVER_BIND); 
while(1) 
{ 
    $a = stream_socket_recvfrom($sock, 65536); 
    $f = fopen('output', 'a'); 
    fwrite ($f, $a); 
    fclose ($f); 
    @ob_flush(); 
} 

이 패킷을 기록하고 저장을, 나는 .MP4 오픈에 이름을 바꿉니다. 나는 출력을 인식 할 수 있으며, 상단 화면이 보이고, 하단이 좋지 않다. 나는 다른 VCL 플레이어와 함께 그것을 포착하려했지만 아무런 문제가 없었다.

+1

UDP는 패킷을 수신 할 순서를 보장하지 않습니다. 패키지는 전송 된 순서와 다른 순서로 도착할 수 있습니다. Perhapse 이것이 문제의 원인 일 수 있습니까? – chhenni

+0

글쎄, 내가 그걸로 계산했지만, 내가 말했듯이, 다른 VCL 플레이어가 올바르게 스트림을 재생합니다. 작은 에러는 문제가되지 않지만, 그것은 만족스럽지 않다. ... –

+2

왜 반복 루프마다 파일 포인터를'fopen()'하고'fclose()'합니까? 이것은 매우 비효율적입니다. – FtDRbwLXw6

답변

2

많은 쓸데없는 것들이 제거되고 효율성이 약간 개선 된 코드입니다. 그것을 시도하고 어떻게되는지보십시오. 문제를 해결할 수도 있고하지 않을 수도 있지만 문제가 발생하면보고하고 거기에서 해결해 나갑니다.

// Settings 
$address = '127.0.0.1'; 
$port = 1234; 
$outfile = "output.mp4"; 

// Open pointers 
if (!$ofp = fopen($outfile, 'w')) 
    exit("Could not open output file for writing"); 
if (!$ifp = stream_socket_server("udp://$address:$port", $errno, $errstr, STREAM_SERVER_BIND)) 
    exit("Could not create listen socket ($errno: $errstr)"); 

// Loop and fetch data 
// This method of looping is flawed and will cause problems because you are using 
// UDP. The socket will never be "closed", so the loop will never exit. But you 
// were looping infinitely before, so this is no different - we can address this 
// later 
while (!feof($ifp)) { 
    if (!strlen($chunk = fread($ifp, 8192))) continue; 
    fwrite($ofp, $chunk); 
} 

// Close file pointers 
fclose($ofp); 
@fclose($ifp); 
+0

음, 출력이 더 좋음을 나타냅니다. 1 바이트조차도 변칙적이어서 전체 비디오가 손상되기 때문에 인코딩에 문제가있는 것 같습니다. 다른 인코딩을 시도했지만, 실제로 픽셀 오류는 적었지만 끔찍한 양 : P –