【问题标题】:Android send mpegts streams over udpAndroid 通过 udp 发送 mpegts 流
【发布时间】:2013-04-02 06:08:00
【问题描述】:

我想在我的 android 应用程序中接收 mpegts 而不是 udp。我为此使用gstreamer。现在,我正在尝试通过 udp 从同一台计算机的 vlc 播放器发送 mpegts 流。

在我的 android 应用程序中,我给出了 uri udp://10.0.2.2:1234 但应用程序给出了错误 Could not get/set settings from/on resource。我试图从互联网上获得解决方案,但到目前为止没有运气。

【问题讨论】:

  • 如果有人对此有任何想法,请提供帮助。
  • 发现我可能给 udp 格式错误。但没有得到正确答案。有人可以请帮忙吗?
  • 我已经使用 udp 来启动我的一个项目(我不是 100% 确定,但根据我的个人记忆),低于 2.3 的 UDP 在任何地方都不起作用。然后我注意到我的一些设备来发送 UDP 数据包基础,而另一个需要 wifi 锁定。希望对你有帮助

标签: android eclipse udp gstreamer


【解决方案1】:

1) UDP 地址范围是 224.0.0.0 到 239.255.255.255,所以不能使用 10.x.x.x

2) 处理完地址后,参考this链接处理程序部分:

获取广播地址您需要访问 wifi 管理器以获取 DHCP 信息并从中构造广播地址:

InetAddress getBroadcastAddress() throws IOException {
    WifiManager wifi = mContext.getSystemService(Context.WIFI_SERVICE);
    DhcpInfo dhcp = wifi.getDhcpInfo();
    // handle null somehow

    int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
    byte[] quads = new byte[4];
    for (int k = 0; k < 4; k++)
      quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
    return InetAddress.getByAddress(quads);
}

发送和接收 UDP 广播数据包 构建广播地址后,一切正常。以下代码将 通过广播发送字符串数据,然后等待响应:

DatagramSocket socket = new DatagramSocket(PORT);
socket.setBroadcast(true);
DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(),
    getBroadcastAddress(), DISCOVERY_PORT);
socket.send(packet);

byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2014-07-13
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多