在安卓设备上使用WOWZA服务器,不使用webview播放实时流RTMP/RTSP。

44
我正在开发一款Android应用程序,希望能够发布和流式传输视频...
我的目标是:
1. 我的应用程序录制视频并将其发送到服务器上。 2. 录制的视频将同时实时流式传输到另一台Android设备。
我已经使用javac和ffmpeg完成了第一个任务。但是我在第二个任务中遇到了困难。我搜索了很多关于从服务器流式传输视频的资料,但没有成功。我不想使用WebView来播放视频。我需要一个RTMP播放器。这项任务已在iOS中完成...我希望在Android中也能实现。有哪些链接可以帮助我完成这个任务?

P.S.:

我正在使用wowza服务器和RTMP流。我想要流式传输RTMP视频(.flv)...如果没有可用的解决方案,我想切换到RTSP,并且需要一个可用的链接来跟进...
现在我已经切换到带有wowza服务器的RTSP播放器,因为我没有找到没有webview的RTMP播放器。如何解决这个问题?

抱歉需要一个一个地打开链接。
  1. https://dev59.com/q3TYa4cB1Zd3GeqP1P-e
  2. https://dev59.com/s2kw5IYBdhLWcg3wHW7n
- Chirag Patel
我有一个关于RTSP服务器的问题。你使用一些免费的服务器吗?还是你有自己的服务器?如果是我们自己的服务器,请给我一些相关信息。它是否像Http一样是普通的服务器,我们需要在服务器端编写一个监听流的服务吗?请在这里给我指导。 - umerk44
我们使用了wowza服务器 - SweetWisher ツ
@SweetWisherツ,我有一个简单的问题,我正在尝试使用你尝试过的同样的方法http://www.walking-productions.com/notslop/2013/01/16/android-live-streaming-courtesy-of-javacv-and-ffmpeg/。但是它有时会崩溃...延迟较高。你是如何解决这个问题的?请回复... - Saty
如果你没有固定使用Wowza,你可以使用http://red5pro.com/,它为Android和iOS提供了一个SDK。 - Paul Gregoire
3个回答

22

您可以通过Vitamio Lib轻松实现。Vitamio可在Android和iOS中播放720p/1080p高清,mp4、mkv、m4v、mov、flv、avi、rmvb、rm、ts、tp以及许多其他视频格式。 Vitamio支持几乎所有流行的流媒体协议,包括HLS(m3u8)、MMS、RTSP、RTMP和HTTP。

这里下载Vitamio Bundle。

示例请参考这里

教程请参考这里


我通过链接发送直播,其中包括FFMPEG库。现在,我将VITAMIO库集成到我的项目中,但是我遇到了这个错误链接 - Mr. N.V.Rao
1
请注意,Vitamio的标准版仅限十二个月 https://www.vitamio.org/en/License/ - valerybodak
Vitamio for Android 现已弃用。 - Ameer
1
@Ameer,如果Vitamio已经被弃用了,现在应该使用什么? - ocramot
也许对于Android来说,ExoPlayer是一个不错的选择。它得到了社区的大力支持,同时也得到了Google的支持,并且具有出色的API架构。#exoplayer #android - william gouvea

3

我正在使用Adobe AIR播放RTMP,效果很棒。我在这里找到了答案:这里,请看代码:

function init_RTMP():void
{
    streamID  = "RT_2";
    videoURL = "rtmp://fms5.visionip.tv/live/RT_2";

    vid = new Video();

    nc = new NetConnection();
    nc.addEventListener(NetStatusEvent.NET_STATUS, onConnectionStatus);
    nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
    nc.connect(videoURL);
}

private function onConnectionStatus(e:NetStatusEvent):void
{
    if (e.info.code == "NetConnection.Connect.Success")
    {
        trace("Creating NetStream");
        netStreamObj = new NetStream(nc);

        metaListener = new Object();
        metaListener.onMetaData = received_Meta;
        netStreamObj.client = metaListener;

        netStreamObj.play(streamID);
        vid.attachNetStream(netStreamObj);
        addChild(vid);
    }
}

谢谢您的回答,但正如我所说,我现在无法切换到Adobe AIR.. :( - SweetWisher ツ
Anas,有没有用于在Android上实现的Android SDK设置?如果您有,请提供一些参考链接。 - Shani Goriwal
@Lucky,很抱歉,我没有使用Android Java,而是使用Adobe Air。 - Anas
是的,这个问题是关于Android的,所以我不明白Adobe Air在这里有什么相关性。 - smirnoff
1
@anas 对不起,我误以为Adobe已经停止支持。在发表评论之前应该先搜索一下。 - smirnoff
显示剩余2条评论

1
如果你没有其他选择,可以使用开源项目spydroid-ipcamera。这是一个符合你需求的替代方案。我已经检查过它,并且它提供了实时视频传输。

我们在使用Live 555方面取得了很多成功,目前我们的目标是IOS,但是Live 555非常便携,我们预计将很容易地移植到Android上。我建议你们考虑一下。基本上,您可以使用Android从相机捕获帧,然后将它们传递给h264descreteFramer和rtpSink,这两个都是可用的Live 555类。 - Michelle Cannon
1
我不想从安卓设备捕获视频,我想要从 Wowza 服务器实时流式传输视频到安卓设备。 - SweetWisher ツ

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