转自:http://blog.csdn.net/xiaoliouc/article/details/8443195
最近调研android视频录制、另一部手机实时观看,大致有以下几种思路。
1. android手机充当服务器,使用NanoHTTPD充当服务器,另一部手机或者pc通过输入http://手机的ip:8080网址观看。
这种方案可以参考 ipcamera-for-android开源项目,网址 http://code.google.com/p/ipcamera-for-android/source/checkout
可以运行的源代码可以在这下载 http://download.csdn.net/detail/xiaoliouc/4933558
缺点:android手机必须支持MP4+ARM_BN格式,有些手机不兼容,延时有点厉害,前面调研在googlecode看到的代码,现在看来方案不可取
2. android手机采用juv-rtmp-client.jar包,网上有收费的包,但可以搜索破解包,通过rtmp协议发布服务到red5服务器。服务器当然是red5了,可以用red5自带的的OFLA Demo做测试。客户端代码可以参考ivideochat,下载地址 http://download.csdn.net/detail/xiaoliouc/4933594
使用支持rtmp协议的播放器播放,如ffplay
缺点:demo延迟很厉害,仅供参考。rtmp协议半公开,难度比较大
3.android手机通过camera类拍摄视频。把一帧一帧的图像压缩通过socket发送到服务器,服务器可以直接观看。而要想让另一台手机也能观看,可以让服务器转发来实现。
例子网上有很多, http://download.csdn.net/detail/xiaoliouc/4933610
缺点:通过一帧一帧的发送数据,传输过程耗费大量流量。玩玩可以,但实际项目中不可取。
4.android手机通过camera类拍摄视频,把拍摄的视频通过h264编码,可以采用软编码(使用x264库或者opencore软件库),java类通过jni调用编译后的so文件来实现。然后通过基于udp的rtp协议传输到服务器。为什么不使用tcp协议呢,因为tcp的重传机制会产生延时和抖动,而单独使用udp传输协议本身是面向无连接的,不能提供质量保证,需要在udp协议只上采用rtp或者rtcp提供流量控制和拥塞控制服务。服务器通过ffmpeg对接收的h264解码并播放。播放可以使用VLC media player。如果对c++比较熟悉,可以看看live555这个开源项目。
缺点:需要懂得的知识很多,jni啊,h264编码解码 ,rtp协议等。使用软编码,效率比较低,且视频质量较差。
5.android手机通过mediaRecorder类拍摄视频,其中当然包括音频了。把拍摄的视频通过h264编码,可以采用硬编码(面向手机的硬件直接操作),只能针对3gp,mp4视频格式。方法参考 http://blog.csdn.net/zblue78/article/details/6078040
这篇博客,里面讲的很详细,提取h264的sps,pps,可以参考 http://blog.csdn.net/peijiangping1989/article/details/6934317
winHex是一款好用的16进制查看工具,下载地址 http://download.csdn.net/detail/xiaoliouc/4928773
代码网上有很多,个人理解是:mediaRecorder录制视频(3gp,MP4),可以通过mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());预览视频,通过localsocket发送到本地的localserversocket的h264实时视频流。
这个过程涉及到硬编码,硬编码个人理解是,在预览过程或者提前确定视频的sps,pps,head(一般为0x00000001),不同的手机硬件不一样。把得到的这些参数写入h264,得到正确的h264视频流,然后把流推送到流媒体服务器,使用支持rtsp协议的播放器播放,比如vlc。
6、采用HLS协议,服务器采用nginx,ffmpeg解码。nginx服务器搭建过程,ffmpeg安装过程 见我前几篇文章。
然后用ffmpeg对解码后的mp4文件进行ts切片,生成带有索引的m3u8文件,然后客户端就可以通过浏览器http://ip:port/ *.m3u8访问。
过程貌似是这样的,但自己由于刚接触不到一个周,还不太理解。
6.相对容易、且效果不错的方法,android手机上搭建rtsp服务器,另一台手机使用VLC播放器输入rtsp://ip:port/播放视频。具体原理是,通过android手机对mediaRecorder录制视频,把localsocket传输到本地的流经过硬编码,添加rtp头,分离NALU包,根据rtsp协议交互过程把数据发送到对方。
代码可以参考spydroid了,源代码可以通过svncheckout,能够正常运行,且效果不错。
http://code.google.com/p/spydroid-ipcamera/source/checkout 。网上还没有分析spydroid源码的文章,等自己空了有机会分析下源代码。
7.前面讲的都是单向视频,如果是双向视频,其实就是视频会议了,可以参考sipdroid开源源代码了,网址 http://code.google.com/p/sipdroid/source/checkout
由于没有时间,就不研究这个了。
相关推荐
在Android平台上,视频录制并保存到本地是一项常见的功能,尤其对于开发移动应用的开发者来说,了解这个过程至关重要。本文将详细讲解如何实现Android视频录制,并将录制的视频保存到设备的本地存储,尤其是SD卡上。...
- 另一种解决方案是在保存视频前,通过处理MediaCodec的输出缓冲区来旋转视频帧。 5. **处理Exif信息**: - 除了在录制过程中处理旋转,还可以在保存视频文件时更新Exif信息,指示视频应如何旋转以正确显示。使用...
本篇文章将深入探讨Android音视频录制的核心知识点,并基于提供的"RecordDemo"压缩包文件,来解析如何实现这一功能。 一、Android音视频录制基础 1. MediaRecorder:Android系统提供了MediaRecorder类,用于录制...
在Android平台上,视频录制是一项常见的功能,用于创建和分享个人或企业内容。在这个"android视频录制"项目中,我们找到了一个在GitHub上发布的高质量小demo,它为用户提供了一个优秀的短视频拍摄体验。这个开源项目...
在Android平台上,开发短视频录制和编辑功能是一项技术性较强的任务,涉及到多媒体处理、图像处理以及用户界面设计等多个方面。在本项目中,开发者利用了开源库RxFFmpeg来实现这一功能,这是一个基于FFmpeg库的...
在Android平台上,实现“视频录制预览网络播放”涉及到多个技术点,主要涵盖视频录制、视频预览、网络流媒体播放以及用户界面设计。以下是对这些关键知识点的详细阐述: 1. 视频录制: Android 提供了 ...
这个"Android短视频录制demo"项目提供了一个基础的实现方案,可以帮助开发者快速理解并构建自己的短视频录制功能。下面将详细介绍这个Demo涉及的关键知识点。 首先,Android短视频录制涉及到的主要技术包括音视频...
本资源"android小视频录制,可直接用于项目"提供了一个简单且稳定的解决方案,适用于各种Android版本,使得开发者可以快速集成到自己的应用中。 一、Android视频录制基础 在Android中,录制视频主要依赖于`...
在Android平台上,开发摄像头应用和实现视频录制是常见的任务,特别是在设计移动应用时。本示例专注于"竖屏"模式,确保用户在预览、拍照和录制视频时获得正确的横竖屏体验。以下是对这个“android 摄像头、视频录制...
在Android平台上进行视频录制是一项常见的任务,涉及到多媒体处理和设备硬件的交互。本文将深入探讨如何使用`MediaRecorder`类来实现视频录制,并解决在实际操作中可能遇到的问题,如花屏和自动对焦问题。 首先,...
总结,实现“android 视频分段录制,分段删除,最后合成一个mp4文件”的功能,需要深入理解Android的多媒体框架,熟练运用`MediaRecorder`进行视频录制,以及掌握`mp4parser`库进行视频文件的处理与合成。...
在Android平台上,开发一款能够录制、编辑和播放视频的应用是一项技术挑战。本解决方案着重于使用NDK(Native Development Kit)并结合开源框架,提供了一套完整的功能,包括视频录制、视频编辑(添加特效)以及视频...
含源码"就是这样一个完整的解决方案,它允许用户直接通过手机摄像头录制视频,并提供了全部源码供开发者参考学习。 首先,Android中的视频录制功能主要依赖`MediaRecorder`类,这是一个强大的多媒体数据录制类,...
在Android平台上开发音视频录制程序是一项常见的任务,它涉及到多媒体处理、硬件访问和编码解码等技术。在本项目中,我们关注的是使用H.263视频编码和AMR_NB音频编码进行录制。以下是对这些关键技术点的详细说明: ...
【大华Android视频录制demo】是一个专为Android平台设计的视频录制示例应用,它集成了多种关键功能,包括实时视频预览、时间选择性回放、录像下载、播放控制、回放过程中抓取图像以及对重要录像进行加解锁管理。...
在Android平台上,开发一款应用程序进行视频录制时,有时我们需要对录制的视频时长进行限制,例如限制用户只能录制7秒的视频。这个功能在很多应用场景中都很常见,比如社交媒体分享或者短视频应用。本文将深入探讨...
在Android平台上进行视频录制时,选择预览是一个关键步骤,它涉及到用户界面设计以及与多媒体框架的交互。本文将深入探讨如何实现一个Android视频录制选择预览功能,并结合"mediaplayer"这一标签来理解其背后的媒体...
在Android应用开发中,视频录制是一项常见的功能,但同时也伴随着各种问题。本文将深入探讨在Android视频录制中可能遇到的问题及其解决方案,旨在帮助开发者更好地理解和解决这些问题。 一、视频录制流程 1.1 开始...
在Android平台上,开发一款视频录制应用是常见的任务之一。这个"Android代码-安卓视频录制Demo",名为"VideoRecorder-master",提供了一个基础的视频录制功能的示例,旨在帮助开发者理解和实现Android设备上的视频...