在PHP中获取UDP多播流

4

我正在尝试在PHP中接收UDP组播流。 接收命令永远不会得到任何东西并且会一直等待。

我可以使用VLC播放器观看流,因此该流可以在我的计算机上访问。 如何使用PHP完成此操作,非常感谢您提供帮助。

这是我的代码。

<?php
error_reporting(E_ALL | E_STRICT);

//创建一个新的套接字

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

//我不确定这个命令。我认为我必须设置此选项才能开始接收数据包。

socket_set_option($socket, SOL_SOCKET, MCAST_JOIN_SOURCE_GROUP, array("group"=>"239.194.0.73","interface"=>"eth0","source"=>"239.194.0.73"));
$binded = socket_bind($socket, '127.0.0.1', 6073);

//接收数据

$from = '';
$port = 0;
socket_recvfrom($socket, $buf, 12, MSG_WAITALL, $from, $port);
echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;
?>

你是否使用的是 PHP >= 5.4.x? - hek2mgl
这是IP和端口的m3u格式。 #EXTINF:0,新闻 udp://@239.194.0.73:6073 - user1285822
1个回答

3
$binded = socket_bind($socket, '127.0.0.1', 6073);

应该是

$binded = socket_bind($socket, '0.0.0.0', 6073);

否则您只能接收来自本地主机的数据包。

我之前尝试过使用0.0.0.0,但那时我没有使用socket_set_option命令。今天我会重试一下,看看是否能够成功。 - user1285822
error_reporting(E_ALL | E_STRICT); $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); $binded = socket_bind($socket, '0.0.0.0', 6073); $rval = socket_set_option($socket, getprotobyname("ip"), MCAST_JOIN_GROUP, array("group"=>"239.194.0.73","interface"=>0)); $from = ''; $port = 0; socket_recvfrom($socket, $buf, 12, MSG_WAITALL, $from, $port); echo "从远程地址 $from 和远程端口 $port 接收到 $buf" . PHP_EOL; - user1285822

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接