实时流媒体编程
http://www.ibm.com.sixxs.org/developerworks/cn/linux/l-mdst/顺序流传输
顺序流传输采用顺序下载的方式进行传输,在下载的同时用户可以在线回放多媒体数据,但给定时刻只能观看已经下载的部分,不能跳到尚未下载的部分,也不能在传输期间根据网络状况对下载速度进行调整。由于标准的HTTP服务器就可以发送这种形式的流媒体,而不需要其他特殊协议的支持,因此也常常被称作HTTP流式传输。顺序流式传输比较适合于高质量的多媒体片段,如片头、片尾或者广告等。
实时流传输
实时流式传输保证媒体信号带宽能够与当前网络状况相匹配,从而使得流媒体数据总是被实时地传送,因此特别适合于现场事件。实时流传输支持随机访问,即用户可以通过快进或者后退操作来观看前面或者后面的内容。从理论上讲,实时流媒体一经播放就不会停顿,但事实上仍有可能发生周期性的暂停现象,尤其是在网络状况恶化时更是如此。与顺序流传输不同的是,实时流传输需要用到特定的流媒体服务器,而且还需要特定网络协议的支持。
用live555和ffplay搭建流媒体环境
相信很多朋友和我一样,想做实时流解码播放之类的程序,可是又不知道如何得到视频流。ffmpeg是一个很好的音视频库,现在网上用ffmpeg解码播放本地文件的程序有很多,而且有很详细的讲解。可是关于流式解码播放的却很少。 用live555可以很方便的搭建一个流媒体服务器,live555在vc6下的源代码,这里有: 这分工程中的vc6-live555就是我们要的东东了,当然这分工程里还有很多实例,也同样值得很好的研究。网上有很多讲解live555配置及工程源代码的资料,可以找来看看。 打开vc6-live555下面的live555.dsw编译,编译可以一次性通过,并会在bin目录下生成live555MediaServer.exe文件,我们可以拖几个媒体文件到这个目录下,注意一定要和live555MediaServer.exe放在同一目录。之后运行live555MediaServer.exe可执行文件: 黑框提示 rtsp://10.22.76.47/<;filename>,表示我们的媒体服务器已经建好了。换一台机子,在cmd下运行ffplay.exe 用下面的形式: ffplay.exe rtsp:/;/10.22.76.47/1.mpg 这样就会弹出一个视频播放画面了。 到这里,我们就建起了一个流式环境了。想调用ffmpeg编写解码实时流的程序也可以很好的实现。遗憾是live555只支持几种视频格式。。。 |
写在前面的话: 开源的好东西真是太多了,就ffmpeg来说就包含太多东西了,即有音视频的编解码(当然其中很多重要的编码器如X264、XVID也是别人的),又有流媒体传输(主要是利用LIVE555),还有播放显示等(主要利用SDL技术),可以看出,ffmpeg自己主要的东西还是解码器。所以你做音视频处理方面要找参考也就知道找谁了。当然还有利用这些技术做成的了些开源的产品如VLC,MPLAYER,LINPHONE,它们都是是非常有价值的利用对象。
目标: 做一个简单的H264播放器,能播放H264文件,网络流媒体并保存成h.264文件。
方法: 学习SDL编程,仔细分析ffplayer.c,参考ffplayer.c进行修改。
计划:SDL学习-2天,ffplayer.c分析-2天,ffplayer.c播放流媒体分析-2天,ffplayer.c保成 264文件-2天
过程:
2009.12.25-学习了其使用方法,并实验了example1和imagetest两个程序。
2009.12.26-学习了其中的event 、keyboard event and multithread。
2009.12.27-找到了一个ffmpeg sdl tutorial,主要在学习其中的文件读取。
2009.12.28-纠结,是用JRTPLIB,还是用ffmpeg自带的函数呢,是乎都不大好。就先用她了,TSRTP。
2009.12.29
2009.12.30
2009.12.31
2010.1.1-(完成)新年庆祝!
结果:
总结:
<uses-permission android:name=”android.permission.RECORD_AUDIO”></uses-permission>总结说明:
- Android SDK中对视频开发方面提供了很大的方便,但是在使用的过程中发现,这些类封装的都很高层,很多地方估计也无法满足开发人员的需求,主要体现在缺少对文件流操作等底层接口,我们只能通过控制状态来控制文件流,缺少这方面操作增加了Android视频开发的难度,比如说增加其他编码器等。
- Android T-Mobile G1可以在线看Youtube视频,然而我们在开发中却发现,其无法播放FLV格式的视频,这就有些不明白了?估计在未来应该会支持的,FLV是当前最流行的流媒体格式,如果不支持对用户在Android上直接看这些FLV视频会有很大的影响。