最近将视频客户端移植到了ANDROID平台。 分享一下开发心得。
类似HTTP LIVE STREAMING的流式下载方式, 但APPLE的TS格式冗余数据太多, 我用的是私有格式,更加节省带宽资源。H264+AMRNB编码。每个分片文件20秒。整体架构如下图:
作为HTTP下载模块对稳定性要求比较高,用NDK的话debug会很麻烦,JAVA层下载效率也还行,所以采用JAVA层的HttpURLConnection类, 服务器端在Response header里包含了下一个文件的filename,下一次的连接时将把filename作为URL的一个参数发送。这样就能做到流式的下载。 建立一个bytearrayoutputstream实例来缓存数据。 并通过JNI传递给文件解析层。
因为JAVA与JNI层数据交互很耗时,所以选择下载好一个完整文件再feed给Parser。
AUDIO必须要流畅,所以单开一个thread, Video来得及的话可以用一个timer(减少一点功耗),开一个thread也行。
H264和AMR-NB都移植自OPENCORE, 手机用baseline够了。如果要支持AAC可用helix的AAC解码器或者OPENCORE AAC Decoder.
JNI解码好再回传给JAVA层显示所造成的延时是无法忍受的,所以选择在NDK层直接render画面和声音。 可参考android ffmpeg开源工程里的做法,或者有网友已经总结提取了方法:http://www.cnblogs.com/mcodec/。 付出的代价就是可移植性, 因为现成的libjnivideo.so和libjniaudio.so都是android 2.2版本的, 其他版本会提示can not load libjnivideo.so,
需要在ANDROID工程里重新编译。 ffmpeg和android media framework的代码都可下载:https://github.com/havlenapetr
发现在NDK使用usleep时CPU占用骤增, 所以在做音视频同步的时候,最好不要用usleep.
在V880上测试,在EDGE网络较稳定的情况下, 176*144, 10帧,视频码率48k,音频码率7.95k, 可以流畅播放。 以下是真机效果。(直播我暂时用feature phone的码流 码率只有32K,画面比较模糊)
分享到:
相关推荐
论文可能详细讨论了HTTP Live Streaming (HLS)、Real Time Streaming Protocol (RTSP)、Progressive Download等常见的视频流传输协议,以及如何在Android平台上实现这些协议的支持。此外,理解多媒体编码格式,如...
在线视频流直播通常基于RTMP (Real-Time Messaging Protocol)、HLS (HTTP Live Streaming) 或DASH (Dynamic Adaptive Streaming over HTTP) 协议。RTMP用于实时传输,适用于低延迟场景;HLS和DASH则支持适应性流...
在Android系统上实现HLS播放,常用到NuPlayer这一组件。NuPlayer由多个子模块组成,例如:HTTPLiveSource用于处理HTTP直播流,HTTPDataSource负责数据下载,M3UParser解析m3u8索引文件,ATSParser负责处理TS文件解析...
在Android平台上实现视频直播功能,开发者常常会遇到各种技术挑战,包括编码、解码、传输、渲染等。在这个“android 视频直播案例”中,我们可能会遇到一系列关键知识点,这些知识点是构建一个完整的视频直播应用的...
本文将深入探讨如何在Android上实现音视频同步、RTMP直播、秒开视频以及如何处理网络掉包情况,这些知识点都是基于提供的标题和描述。我们将主要关注以下几个方面: 1. **Android音视频同步**: 在Android应用中,...
【标题】"live555Camera摄像头直播"是基于开源库live555实现的摄像头直播解决方案。live555是一个强大的实时流媒体库,它支持多种网络协议和编码格式,广泛应用于网络视频传输。 【描述】这个项目利用live555库来...
在Android平台上进行流媒体服务时,Live555是一个常用且强大的开源库,它支持多种实时音频和视频传输协议,如RTSP (Real Time Streaming Protocol)、RTP (Real-time Transport Protocol) 和RTCP (Real-time ...
在Android平台上,直播和点播视频服务已经成为移动应用不可或缺的一部分,尤其在娱乐、教育和社交领域。本资源提供了一个可以直接使用的Android直播和点播视频源码,名为"VST-1.1.9-0928"。下面将详细探讨相关知识点...
- **HTTP Live Streaming (HLS)**:一种基于HTTP的流媒体网络协议,被广泛应用于在线视频和音频流传输中。 - **Dynamic Adaptive Streaming over HTTP (DASH)**:一种自适应比特率流媒体标准,可以根据网络条件动态...
ijkplayer支持多种视频格式和协议,如RTSP、RTMP、HTTP Live Streaming (HLS)等,提供了丰富的API供开发者调用,实现自定义的播放控制。 在"VideoListDemo"这个项目中,我们能看到如何将ijkplayer集成到Android应用...
【标题】"基于Live555的从多个摄像头实时获取H264/265数据并转发的Rtsp服务器"所涉及的核心技术主要包括以下几个方面: 1. **Live555**: Live555是一个开源的多媒体流媒体库,主要用于实现Real-Time Transport ...
这个“基于android实现的网络视频播放器程序源码”提供了一个完整的实例,帮助开发者深入理解如何在Android环境中构建这样的应用程序。以下是对该源码中可能包含的重要知识点的详细解析: 1. **多媒体框架...
在Android平台上开发一款视频直播应用是一项复杂而富有挑战性的任务,尤其当涉及到集成弹幕功能并从第三方平台如斗鱼抓取内容时。这个项目"video-live-master"显然是一个实现此类功能的源代码示例。下面我们将深入...
在Android平台上,视频流技术是实现在线视频播放的关键。"Android Video Streaming" 是一个重要的主题,涉及的内容广泛,包括如何使用VideoView组件、MediaController、SurfaceView,以及如何处理流媒体协议,如RTSP...
总结,通过上述步骤,我们可以在Android平台上成功构建并运行基于Live555的RTSP流媒体服务器。这个过程不仅涉及了Live555的编译和配置,也涵盖了Android原生开发的关键技术,如JNI和NDK的使用。完成这项工作后,...
在安卓平台上,开发一款能够处理直播视频播放的流媒体应用是一项技术挑战,涉及到多个关键知识点。这个压缩包文件"安卓直播视频播放流媒体IPCameraRTSPDLNA相关-android视频播放器自定义控制器.zip"显然是一个关于这...
2. HLS(HTTP Live Streaming):基于HTTP的流媒体协议,被iOS和Android广泛支持,原生MediaPlayer可以直接处理。 3. RTSP(Real Time Streaming Protocol):一种控制协议,用于流媒体服务器与客户端之间的交互,...
VLC框架是一个强大的开源多媒体播放器,其全称为...通过以上内容,我们可以了解到这个基于VLC框架的RTSP,RTMP流直播Demo的实现原理和关键知识点,这对于想要开发Android视频直播应用的开发者来说是一份宝贵的参考资料。