Default multicast interface address to "0.0.0.0" if absent
It aligns with what a lot of other apps are doing, e.g. tsplay. Also added notes in docker to adjust network setting if wants to use multicast in docker container. Change-Id: I666a8979cc041c904f7ff8e3e022f800c0830d5d
This commit is contained in:
parent
0fdb0d02aa
commit
82e0fd2095
|
@ -32,6 +32,14 @@ This runs the container and maps `host_media_path` to `media` in the container:
|
||||||
$ docker run -v /host_media_path/:/media -it --rm google/shaka-packager
|
$ docker run -v /host_media_path/:/media -it --rm google/shaka-packager
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Note that the networking in the container is containerized by default, so if
|
||||||
|
you want to access UDP multicast in the host network, you will need to configure
|
||||||
|
the network explicitly. You may do this with `--net=host` option, i.e.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker run -v /host_media_path/:/media -it --net=host --rm google/shaka-packager
|
||||||
|
```
|
||||||
|
|
||||||
Then in the container, run the packager command, e.g.:
|
Then in the container, run the packager command, e.g.:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|
|
@ -11,7 +11,7 @@ options:
|
||||||
:interface=<addr>, source=<addr>:
|
:interface=<addr>, source=<addr>:
|
||||||
|
|
||||||
Multicast group interface address. Only the packets sent to this address is
|
Multicast group interface address. Only the packets sent to this address is
|
||||||
received.
|
received. Default to "0.0.0.0" if not specified.
|
||||||
|
|
||||||
:timeout=<microseconds>:
|
:timeout=<microseconds>:
|
||||||
|
|
||||||
|
|
|
@ -207,12 +207,6 @@ bool UdpFile::Open() {
|
||||||
struct ip_mreq multicast_group;
|
struct ip_mreq multicast_group;
|
||||||
multicast_group.imr_multiaddr = local_in_addr;
|
multicast_group.imr_multiaddr = local_in_addr;
|
||||||
|
|
||||||
if (options->interface_address().empty()) {
|
|
||||||
LOG(ERROR) << "Interface address is required for multicast, which can be "
|
|
||||||
"specified in udp url, e.g. "
|
|
||||||
"udp://ip:port?interface=interface_ip.";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (inet_pton(AF_INET, options->interface_address().c_str(),
|
if (inet_pton(AF_INET, options->interface_address().c_str(),
|
||||||
&multicast_group.imr_interface) != 1) {
|
&multicast_group.imr_interface) != 1) {
|
||||||
LOG(ERROR) << "Malformed IPv4 interface address "
|
LOG(ERROR) << "Malformed IPv4 interface address "
|
||||||
|
|
|
@ -31,12 +31,12 @@ class UdpOptions {
|
||||||
UdpOptions() = default;
|
UdpOptions() = default;
|
||||||
|
|
||||||
/// IP Address.
|
/// IP Address.
|
||||||
std::string address_;
|
std::string address_ = "0.0.0.0";
|
||||||
uint16_t port_ = 0;
|
uint16_t port_ = 0;
|
||||||
/// Allow or disallow reusing UDP sockets.
|
/// Allow or disallow reusing UDP sockets.
|
||||||
bool reuse_ = false;
|
bool reuse_ = false;
|
||||||
// Address of the interface over which to receive UDP multicast streams.
|
// Address of the interface over which to receive UDP multicast streams.
|
||||||
std::string interface_address_;
|
std::string interface_address_ = "0.0.0.0";
|
||||||
/// Timeout in microseconds. 0 to indicate unlimited timeout.
|
/// Timeout in microseconds. 0 to indicate unlimited timeout.
|
||||||
unsigned timeout_us_ = 0;
|
unsigned timeout_us_ = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,7 +25,7 @@ TEST_F(UdpOptionsTest, AddressAndPort) {
|
||||||
EXPECT_EQ(88u, options->port());
|
EXPECT_EQ(88u, options->port());
|
||||||
// The below fields are not set.
|
// The below fields are not set.
|
||||||
EXPECT_FALSE(options->reuse());
|
EXPECT_FALSE(options->reuse());
|
||||||
EXPECT_EQ("", options->interface_address());
|
EXPECT_EQ("0.0.0.0", options->interface_address());
|
||||||
EXPECT_EQ(0u, options->timeout_us());
|
EXPECT_EQ(0u, options->timeout_us());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ TEST_F(UdpOptionsTest, Reuse) {
|
||||||
EXPECT_EQ("224.1.2.30", options->address());
|
EXPECT_EQ("224.1.2.30", options->address());
|
||||||
EXPECT_EQ(88u, options->port());
|
EXPECT_EQ(88u, options->port());
|
||||||
EXPECT_TRUE(options->reuse());
|
EXPECT_TRUE(options->reuse());
|
||||||
EXPECT_EQ("", options->interface_address());
|
EXPECT_EQ("0.0.0.0", options->interface_address());
|
||||||
EXPECT_EQ(0u, options->timeout_us());
|
EXPECT_EQ(0u, options->timeout_us());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue