Android30分钟 DIY搭建局域网视频直播演示Demo

来源:互联网 发布:软件模块化设计 实例 编辑:程序博客网 时间:2024/04/29 13:03

        现在移动直播如火如荼的一片大火。而直播技术也层出不穷,各种开源的,收费的直播SDK平台也不少。以上所有种种,虽然可以快速的实现直播功能,但对于自己技术的积累和学习并没有什么好处。本例子通过不借助任何框架。纯手打代码的模式。所有代码皆可编辑查看方便自己学习和积累。

       手机直播的原理很简单。就是通过手机带有的Camera模块。获取到Camera的数据,然后通过网络,发送到服务器。服务器再通过广播,推送到其他客户端。主要涉及到采集数据,发送数据,广播数据,客户端接受数据,再显示数据。如下图所示,视频直播离不开视频采集,原始的视频数据太大了,需要进行视频处理,处理后再压缩,节省宝贵的宽带,最后进行推流,推出去。


       以上,说的很简单。其实实际操作起来,有好多技术问题要处理。普通的手机如果打开数据录像,10s的数据就有100多兆。如何处理这样的数据就设计到编码问题。这是一个比较大的坑。另外,还有就是带宽问题了。无论你编码压缩的多好,用户量如果上去,其带宽使用是相当可观。不同地域,不同电信提供商的都要考虑。另外就是服务器并发推送的处理。10万个用户和500万的用户视频推送处理是个不小的挑战。而本文对于以上问题都不做讨论。仅仅是个局域网手机直播demo。

代码架构


      先说下实现原理。通过调用Android Camera,通过onReviewListener进行数据的获取。

以上是一种获取预览信息的方式。除了此种方式,还有通过MediaRecorder的方式。获取视频信息。

还有一种直接把SurfaceView引用传下去,使用NDK调用Camera,直接获取数据源信息。

此种方式效率最高。但是这是Android工程师要求熟练NDK操作。

考虑过没,那个预览获得的数据是什么数据?

这个是大名鼎鼎的YUV数据。你搜索下这种数据格式。它算是各种视频流获取的第一手数据。原生数据。

对于YUV数据如何在客户端显示出来呢?这就是另一个问题了。理论上SurfaceView可以直接显示的。但是Java层并没有提供

相关接口。你需要调用NDK层里实现。





没写完,待续

代码工程:

http://download.csdn.net/detail/a315823806/9699223


0 0