【问题标题】:Is it possible to send a live stream from one app to another in Android via WiFi是否可以通过 WiFi 将实时流从一个应用程序发送到 Android 中的另一个应用程序
【发布时间】:2022-08-19 23:42:30
【问题描述】:

我有 2 个类似的应用程序。一台服务器作为服务器,另一台可以看作是客户端。现在我将使用服务器应用程序的摄像头,并通过 WiFi 将应用程序内的视频流式传输到客户端。我想知道在带有Java的Android中是否有或多或少方便的方法。我在 Stackoverflow 上发现了一些关于此问题的帖子,例如 Live-stream video from one android phone to another over WiFiStream live video from phone to phone using socket fdLive video streaming application on Android。但是他们都大约 10 岁了,我想知道现在是否有更方便的方法可以做到这一点?

提醒: 有谁知道我可以在哪里获得有关此问题的更多帮助?

  • 我没有时间编写示例项目,但概念很简单,特别是如果“服务器”和“客户端”在同一个 wifi 网络上。让服务器创建视频流并通过 UDP 套接字发送。让客户端创建一个 UDP 套接字并监听服务器。只有当您需要超过 ~10-15fps 时,事情才会变得复杂。
  • @谢谢 free_coupons_for_sale_1023。实际上 15 fps 就足够了,但 10 fps 太少了。您提到了“让服务器创建一个视频流并通过 UDP 套接字发送它”-> 您建议我使用哪个 Android Java 类来创建视频流以及哪个 Android Java 类用于 UDP 套接字?
  • ~10-15 fps 是估计值;实际速率将取决于所使用的硬件。在类方面,java.net.SocketAndroid Camera API。我确信存在简化该过程的库,但我不知道手头有任何库。
  • @free_coupons_for_sale_1023:感谢免费优惠券您的回答。实际上,此问题的目的之一是了解此任务的库。我在互联网上搜索,但我只能找到我在问题中发布的非常复杂的解决方案。所以我不确定是否有你认为的真正好的库。
  • @free_coupons_for_sale_1023:我的最后一条评论有任何 cmets 吗?我将非常感谢您的每一个进一步评论。

标签: java android live-streaming


【解决方案1】:

寻求书籍、工具、软件库等的建议被认为与本网站无关。

正如@CommonsWare 所说,这是题外话。但是从一个好的例子中学习如何做到这一点会很好。所以......

https://github.com/hypeapps/Endoscope(626 颗星) 许可证:GNU GENERAL PUBLIC LICENSE 第 3 版,2007 年 6 月 29 日

这些是您想在这个开源应用程序中了解的要点。 但是由于它是 GNU 许可的,如果您想充分使用它,您还需要使您的源代码 GNU 开源。

主持人

视频流.java

/**
 * Starts the stream.
 * This will also open the camera and display the preview 
 * if {@link #startPreview()} has not already been called.
 */
public synchronized void start() throws IllegalStateException, IOException {
    if (!mPreviewStarted) mCameraOpenedManually = false;
    super.start();
    Log.d(TAG,"Stream configuration: FPS: "+mQuality.framerate+" Width: "+mQuality.resX+" Height: "+mQuality.resY);
}

RtspServer.java

/* Method PLAY */           
else if (request.method.equalsIgnoreCase("PLAY")) {
...         
requestAttributes += "url=rtsp://" + mClient.getLocalAddress().getHostAddress() + ":" + mClient.getLocalPort() + "/trackID=" + 0 + ";seq=0,";
...
// If no exception has been thrown, we reply with OK
response.status = Response.STATUS_OK;
}

客户播放:它使用媒体播放器。

@Override
public void configureMediaPlayer(Uri videoUri) {
    ...
    ...
    try {
        mediaPlayer.setDataSource(this, videoUri);
        mediaPlayer.prepareAsync();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【讨论】:

  • 谢谢你的帖子斯坦利。实际上,我不想要一个可以做到这一点的应用程序,而只是它的代码。此外,我不能让我的项目开源。这就是为什么您建议的解决方案并没有真正帮助我的原因。我仍然很欣赏你的帖子。
  • 我认为 user19309143 建议的方法听起来不错“让服务器创建一个视频流并通过 UDP 套接字发送它。让客户端创建一个 UDP 套接字并监听服务器。”但是,如果有一些库可以简化这个复杂的过程,那就太好了。你有什么建议吗?
  • @VanessaF 直接在原始套接字上工作很容易出错,并且需要大量的编码工作。尝试为您的解决方案找到特定于协议的方式。我建议您尝试websockets,这将简化您的工作。但是 Websocket 协议有它自己的缺点,它是基于 TCP 而不是 UDP
  • @UmerFarooq:感谢您的评论 Umer。哦,这很烦人。 Android 中似乎没有一个好的解决方案,可以通过 WiFi 从一个应用程序向另一个应用程序发送实时流。我认为应该有一个解决方案,但每个选项都有很大的缺点。我想尝试使用 UPD 套接字方法,但现在您说这非常具有挑战性且容易出错,我不确定是否应该尝试。真的很奇怪,有点令人沮丧,即使在这么多年之后,在 Android 中仅发送视频似乎也非常困难。
  • @UmerFarooq:还有更多的 cmets 吗?
猜你喜欢
  • 1970-01-01
  • 2015-12-27
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
相关资源
最近更新 更多