PHP和Flash關于直播應用的結合已經漸漸成為很多網站上使用的一個常見方法,因為這種方法可以實現實時數據傳輸和渲染。例如一些視頻網站即是采用PHP后臺應用與Flash前端配合來進行直播。在本文中,我們將會介紹一些關于PHP Flash直播的相關內容。
首先來談一談PHP直播應用中連接Flash的操作。在這個應用中,PHP應用要向Flash發送實時數據,而Flash則需要把這些數據進行解析和顯示出來。關于連接這兩個平臺,Socket.IO可以實現PHP和Flash之間的通信。下面是一個PHP向Flash發送數據的例子:
$fp = fsockopen('tcp://192.168.1.1', 1935, $errno, $errstr , 200); if($fp){ $message = "Hello world!"; $msgLen = strlen($message); $packet = chr(0x02) . chr(0x00) . chr(0x00) . pack('N', $msgLen) . $message . chr(0x00); fwrite($fp, $packet); fclose($fp); }
當Flash接收到數據時,我們需要進行解析和渲染,下面是Flash解析數據的例子:
private function onData(event:Event):void { while(_socket.bytesAvailable) { var header:ByteArray = new ByteArray(); header[0] = _socket.readByte(); if(header[0] == 0x02) { var size:ByteArray = new ByteArray(); _socket.readBytes(size, 0, 4); var length:uint = size.readUnsignedInt(); if(_socket.bytesAvailable >= length + 1) { var message:ByteArray = new ByteArray(); _socket.readBytes(message, 0, length); _socket.readByte(); var str:String = message.readUTFBytes(message.bytesAvailable); trace(str); } } } }
其次,PHP直播應用中最常用的是RTMP協議,這個協議通過flash media server來實現。RTMP是一個實時的協議,可以允許聲音,視頻和數據等實時傳輸。在以下的例子中,我們使用了FMIS(Flash Media Interactive)應用程序來實現RTMP通信:
$socket = fsockopen('192.168.1.1', 1935); $message = "connect url=' rtmp://192.168.1.1/live/room1 live=true timestamp=88761.54E-RtmpTimestamp';"; $request = "GET /fmi HTTP/1.1 \r\n"; $request .= "Host: 192.168.1.1:1935 \r\n"; $request .= "Connection: Keep-Alive \r\n"; $request .= "User-Agent: FFmpeg/2.8.6 \r\n"; $request .= "Content-Length: " . strlen($message) . "\r\n"; $request .= "Content-Type: application/x-fcs-comet \r\n\r\n"; $request .= $message; fwrite($socket, $request); $header = fread($socket, 15); $data = fread($socket, 135); if(preg_match('#(code)="([^"]+)"#', $data, $matches)) { if($matches[2] == 'NetConnection.Connect.Success') { echo "Connect successed!"; } } fclose($socket);
最后,我們來看看PHP直播應用中實現流媒體的過程,這與RTMP協議密切相關。我們可以使用FFMPEG來實現轉播流媒體的操作,以下是一個極簡轉播流媒體的例子:
$base_cmd = 'ffmpeg -i input.flv -vcodec copy -acodec copy'; $output = ' -f flv "rtmp://192.168.1.1/live/room1";'; exec($base_cmd . $output, $o);
綜上,本文重點闡述了PHP Flash直播應用中的一些關鍵點,例如通信,數據傳輸,協議使用等,我們相信這些內容對于初學者來說應該是非常有用的。