`

android视频录制、另一部手机实时观看方案

 
阅读更多

原文出自: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 ML套件姿势检测+CameraX

    **姿势检测** 是ML Kit的一个重要组件,它能够分析图像或视频流,识别出人体的关键关节位置,如头部、肩部、肘部、腕部等。这种技术在健身、游戏、医疗等领域有广泛应用。例如,它可以用于指导用户进行正确的体操...

    大话android企业级开发

    《大话Android企业级开发》是一部专为有一定Java编程基础的读者设计的原创教程,旨在帮助读者快速且高效地掌握Android开发技能,特别是在企业级应用领域的实践。该教程由国士工作室精心编著,结合了官方文档、市场上...

    WiFi手机摄像头

    在这个应用中,WiFi是连接手机摄像头与接收端设备(如电脑或另一部手机)的关键,确保了视频流的稳定传输。 该应用的安装文件"WiFi手机摄像头_Camera_WiFi_LiveStream_1.9.4.apk"表明,这是一款适用于Android系统的...

    DroidCam.Client.6.0.FullOffline.zip 电脑端和手机端 真正能用的版本

    它的便捷性在于不需要额外购买硬件,只需要一部兼容的手机就能实现。同时,由于它是无线连接,用户可以在一定范围内自由移动,增加了视频录制的灵活性。 总结来说,DroidCamX是一款高效实用的工具,它结合了安卓端...

    cameraspy:使用您的手机作为安全摄像头的 Android 应用程序

    用户可以通过另一部手机、平板电脑或电脑查看这些实时画面,确保家庭、办公室或其他重要区域的安全。 Cameraspy的另一个亮点是其隐蔽性。它可以设置为静默模式,避免在运行时发出声音或显示通知,这样就可以在不...

    htc g8简体中文&繁体中文操作说明

    《HTC G8简体中文&繁体中文操作说明》是一部详尽的用户指南,针对的是HTC G8,也称为WildFire手机。这部手册旨在帮助用户熟悉并掌握这款设备的各项功能,无论你是初次接触还是想要深入理解其复杂操作,都能从中受益...

    Xyplayer X4.0.8最新测试版源码

    8. **截图与录屏**:X4.0.8测试版可能包含了截图和录屏功能,用户可以轻松捕捉精彩瞬间或者录制视频。 9. **播放历史记录**:保存用户的播放历史,方便用户回溯和继续上次未完成的播放。 10. **音频可视化**:对于...

Global site tag (gtag.js) - Google Analytics