从安卓相机实时传输视频到服务器

293

我看到了很多关于如何从服务器向Android设备流视频的信息,但是关于另一种方式,比如Qik,就不多了。有人可以指点我正确的方向,或者给我一些如何解决这个问题的建议吗?


10
我也希望看到答案。你有想到什么吗? - Jeremy White
1
你可以查看ffmpeg中的一个组件ffserver。 - Vinay
1
我有一个相关的问题,可能也会对您感兴趣。它涉及到在视频捕获和容器部分完成后如何通过3G推送视频流。http://bit.ly/vYpWGy - michael
所以,虽然已经过去了将近两年,但这仍然出现在搜索结果中,因此对某些人可能会有用:您可以从Google Hangout流视频。 - stinkoid
嗨JCL,你能给我一些链接帮助我从服务器流式传输视频到安卓设备吗? - Haris
显示剩余4条评论
9个回答

127

我托管了一个开源项目,旨在让安卓手机变成IP摄像头:

http://code.google.com/p/ipcamera-for-android

该程序从LocalSocket获取原始视频数据,在流媒体传输前先检查MP4的MDAT MOOV。直播视频以FLV格式打包,并可以通过内置Web服务器使用Flash视频播放器播放 :)


3
给我带来了错误,比如java.lang.UnsatisfiedLinkError:Couldn't load teaonly:findLibrary返回null。如果有人有解决方案,请分享。谢谢。 - anddev
1
@mpp:该应用程序具有NDK代码。您可以自行编译它,或从“下载”下的Google Code项目中的apk中获取.so文件。 - Turnsole
1
我也遇到了java.lang.UnsatisfiedLinkError错误。请简要说明消除该错误的步骤。 - user1699548
这里有一个提示,可以避免UnstatisfiedLinkError错误。解压ipcamera.apk,您会在lib/armeabi下找到两个库,将它们放入源代码项目的lib/armeabi中。我已经验证过,它可以工作。 - aarontang
1
对于那些不理解UnsatisfiedLinkError的人:你必须使用NDK构建C代码。简单来说,运行ndk-build。更多信息,请阅读NDK文档 - Paul Lammertsma
显示剩余6条评论

71
花了一些时间,但我最终成功制作了一个可以实现这个功能的应用程序。如果你感兴趣,请查看谷歌代码页面:http://code.google.com/p/spydroid-ipcamera/。 我在我的代码中添加了大量注释(主要是查看CameraStreamer.java),所以应该很容易理解。 困难的部分实际上是理解RFC 3984并为数据包转换过程实现一个合适的算法。(根据RFC,此算法将MediaRecorder生成的mpeg4 / h.264流转换为漂亮的rtp流)。
再见。

2
非常感谢!目前我无法正确使用h264,而且我也不知道如何将其更改为h263(我完全不知道该怎么做)。不管怎样,谢谢你! - Yotes
1
我正在使用相同的代码,但在Android上使用rtsp流时,它显示“无法播放视频”。我正在使用VideoView。你能帮忙吗? - Rohit Mandiwal
1
目前为止非常好用!我正在使用它来从Glass流视频(经过一些工作/编辑/弄清楚),但到目前为止,我只能通过基于Windows的浏览器(Chrome)与vlc插件连接。 Android / iPad上的VLC或任何其他rtsp播放器都无法接收流(其中一个看起来不错,但试图根据设备名称获取流,而此代码返回为0,因此无法找到)。尽管如此,在编码了一天后得到了结果,感谢您,所以赞! - MacD
@MacD,你使用spydroid-ipcamera代码(整个项目还是只有某些类?你能告诉我吗?)或者这个库https://github.com/fyhertz/libstreaming在Google Glass上进行流媒体传输吗?非常感谢! - Bae
你好,你能解释一下如何在Android Studio中实现这个项目吗?我无法使其运行。 - utdev

24

他们在那边所做的是使用 RTP 数据包流式传输到服务器。现在的问题是服务器上正在做什么?转码是什么意思,它是如何被流式传输的? - Azlam
不,我没有选择SIPDroid方法,它太复杂了。然后我使用了MJPEGServer做了一些事情。 - Azlam

20
我开发了一个名为Kickflip的开源SDK,旨在使Android设备上的视频流媒体体验变得轻松无痛。
该SDK演示了Android 4.3的MediaCodec API的使用,将设备硬件编码器的数据包直接传输到FFmpeg,以进行RTMP(使用librtmp)或HLS格式的H.264 / AAC流媒体。它还展示了实时OpenGL效果(标题、色度键和淡入淡出)和后台录制。
感谢Stack Overflow,特别是fadden

它能够流式传输到任何支持HLS的客户端(不仅仅是您自己的服务器)吗? - 4ntoine
4
@dbro,我试图了解您的服务,但在查看您的价格信息之前,需要我的登录信息。这就像您正在收集电子邮件地址一样。如果这不是您的意图,您应该提供类似Parse、App Engine和其他许多公司所做的方式来公开价格信息。请尽量提高内容易懂性,但不要改变原意。 - learner
视频相机是否可以将视频发送到Kickflip,然后传输到安卓手机?如果可以,哪种类型的视频相机适合此操作? - Lutaaya Huzaifah Idris

11

这个使用了闭源组件。有没有开源的替代品? - Raj
你可以使用JavaCV来完成这个。我在我的项目中使用它,从安卓设备到Wowza媒体服务器实现了实时流传输。另外,你也可以使用https://github.com/begeekmyfriend/yasea - Chinthaka Devinda
libs streaming是免费的吗? - AKRAM EL HAMDAOUI
在libstreaming中,我们可以使用声卡设备作为输入音频源而不是麦克风吗? - user2980181

5

我可以使用这个链接将移动端的实时摄像头视频发送到我的服务器,具体请参考以下链接: 查看链接

参考上面的链接,在链接中有一个示例应用程序。你只需要在RecordActivity类中设置你的服务URL即可。

例如: ffmpeg_link="rtmp://yourserveripaddress:1935/live/venkat";

我们可以使用该链接发送H263和H264类型的视频。


我使用了上面的链接提供的代码,但是无法开始录制。出现了“没有视频流”的异常。你有任何想法吗? - Akhilesh Sk
通过使用上述代码,您可以通过RTMP URL将实时视频发送到服务器。这不是为了录制目的。如果您想要录制视频,则需要在服务器端进行录制。 - Venkat
嗨@ Venkat,是否有可能将实时视频从相机发送到Android手机?您是否有一些代码链接,例如使用Youtube Live等? - Lutaaya Huzaifah Idris
@LutaayaHuzaifahIdris 是的,这是可能的。我之前就做过这个。 - Venkat
嗨@Venkat,你能帮我解决这个问题吗?我找不到RecordActivity.class文件。 - sanyam
嗨Venkat,上面的代码非常老旧,无法构建。在构建代码时出现了错误。 - v teja

1

请查看Yasea

Yasea是一个Android流媒体客户端。它将来自相机和麦克风的YUV和PCM数据编码为H.264 / AAC,封装为FLV并通过RTMP传输。

功能:

  1. 支持Android mini API 16。
  2. 支持H.264 / AAC硬编码。
  3. 支持H.264软编码。
  4. 支持带状态回调处理程序的RTMP流媒体。
  5. 支持竖屏和横屏动态方向。
  6. 支持前置和后置摄像头热切换。
  7. 同时录制到MP4和流媒体。

1
Mux(我的公司)拥有一个开源Android应用程序,可以将RTMP流式传输到服务器,包括设置相机和用户交互。它的构建是为了流式传输到Mux的直播流API,但可以轻松地流式传输到任何RTMP入口点。

-7
根据您的预算,您可以使用一个能够将图像发送到服务器的树莓派相机。我在这里添加了两个教程,您可以在其中找到更多细节:

这个教程向您展示如何使用树莓派相机并在Android设备上显示图像

这是第二个教程,您可以在其中找到一系列关于相机和Android设备之间实时视频流传输的教程。


out of the context - Vikas Kandari

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