最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript
http://www.voidcn.com/article/p-zwjrflvg-bdq.html
2015-02-25 12:40?
4352人阅读?
评论(6)?
收藏?
举报
flash
actionscript
播放
推流
RTMP
目录(?)[+] ===================================================== Flash流媒体文章列表: 最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript) 最简单的基于Flash的流媒体示例:网页播放器(HTTP,RTMP,HLS) ===================================================== 本文记录一些基于Flash的流媒体处理的例子。Flash平台最常见的流媒体协议是RTMP。此前记录的一些基于C/C++的RTMP播放器/推流器,但是没有记录过基于Flash中的ActionScript的RTMP播放器/推流器。其实基于Flash的RTMP播放器/推流器才能算得上是RTMP技术中的“正规军”。RTMP本身设计出来就是用于Flash平台之间通信的,而且RTMP最大的优势——“无插件直播”,也是得益于广泛安装在客户端的Flash Player。因此本文分别记录一个基于ActionScript的RTMP播放器和基于ActionScript的RTMP推流器。 基于C/C++的RTMP流媒体处理的例子可以参考下面几个。 发布 最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布) 最简单的基于librtmp的示例:发布(FLV通过RTMP发布) 最简单的基于FFmpeg的推流器(以推送RTMP为例) 接收 最简单的基于librtmp的示例:接收(RTMP保存为FLV) 最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0) 简介相比于使用C/C++处理RTMP而言,使用ActionScript处理RTMP非常的简单。RTMP建立连接的方法都已经封装好了,只需要调用现成的接口函数就可以了。但是使用ActionScript处理RTMP的劣势也十分明显——可供自己开发的地方很少。由于Flash本身不开源,所以我们无法得到它的底层代码,因而也不能对编解码底层的参数进行调整。总而言之,ActionScript处理RTMP可以概括为几个字:“简单但是不灵活”。 ActionScript播放RTMPActionScript播放RTMP流媒体的流程如下图所示。
从图中可以看出,流程可以分成两部分:播放和显示。 播放播放分成3步: (1)建立NetConnection(2)建立NetStream (3)调用NetStream的play()方法 前2步分别建立了RTMP规范中的两个逻辑结构:NetConnection和NetStream。NetConnection代表服务器端应用程序和客户端之间基础的连通关系。NetStream代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个NetConnection,但是基于该连接可以创建很多NetStream。这两个结构的结构如下图所示。
显示显示部分将播放的视频显示在“舞台”上。这一部分通过创建一个Video对象实现。 ActionScript推送RTMPActionScript推送RTMP流媒体的流程如下图所示。
从图中可以看出,推送RTMP的流程和播放有些类似,最主要的不同在于推送最后调用的是NetStream的publish()方法,而播放最后调用的是NetStream的play()方法。推流分成4步: (1)建立NetConnection (2)建立NetStream (3)绑定摄像头和麦克风 (4)调用NetStream的play()方法 推流程序开始运行后,可以通过ffplay,VLC或者Flash应用程序访问相应的RTMP URL查看流媒体。 代码本文附件中包含以下2个ActionScript工程: simplest as3 rtmp player,最简单的RTMP播放器,其中包含3个独立的子工程: simplest_as3_rtmp_player:最简单的RTMP播放器。simplest_as3_local_player:最简单的本地文件播放器。simplest_as3_rtmp_player_multiscreen:最简单的RTMP多屏播放器。 simplest_as3_rtmp_streamer,最简单的RTMP推流器下面看一下上述几个工程的源代码。 simplest_as3_rtmp_player simplest_as3_rtmp_player是最简单的RTMP播放器,代码如下所示。 simplest_as3_local_player simplest_as3_local_player用于播放本地FLV文件。ActionScript中播放本地视频(*.flv)和播放RTMP流程是一样的:先创建NetConnection,再创建NetStream。它们最大的不同在于,播放本地文件建立NetConnection的时候,是不传地址的。例如播放RTMP的时候代码如下:
simplest_as3_rtmp_player_multiscreen simplest_as3_rtmp_player_multiscreen是一个多屏播放的简单例子。实现了2x2网格播放4路视频。不再过多记录。 simplest_as3_rtmp_streamer simplest_as3_rtmp_player是最简单的RTMP推流器,代码如下所示。
结果 程序运行后的结果如下图所示。
simplest_as3_local_player运行会播放sintel.flv文件。 运行结果如下图所示。
simplest_as3_rtmp_player_multiscreen运行后会连接4个RTMP URL。 运行结果如下图所示。
simplest_as3_rtmp_streamer运行结果后会推送本机的摄像头的视频和麦克风的音频到指定的RTMP URL(在这里是rtmp://localhost/live/myCamera)。左侧的视频是从摄像头读取的视频,右侧的视频是推流后从RTMP URL读取的视频(一般会有一定延时)。 运行结果如下图所示。
下载Simplest flashmedia example SourceForge:https://sourceforge.net/projects/simplestflashmediaexample/ Github:https://github.com/leixiaohua1020/simplest_flashmedia_example 开源中国:http://git.oschina.net/leixiaohua1020/simplest_flashmedia_example CSDN下载:http://download.csdn.net/detail/leixiaohua1020/8456441 本工程包含如下基于Flash技术的流媒体的例子: simplest_as3_rtmp_player: ?最简单的RTMP播放器(基于ActionScript) simplest_as3_rtmp_streamer: 最简单的RTMP推流器(基于ActionScript) rtmp_sample_player_adobe: ?从Adobe Flash Media Sever提取出来的测试播放器 rtmp_sample_player_wowza: 从Wowza服务器中提取出来的测试播放器 rtmp_sample_player_flowplayer: 基于FlowPlayer的RTMP/HTTP播放器(添加RTMP plugin) rtmp_sample_player_videojs: 基于VideoJS的RTMP/HTTP播放器 rtmp_sample_player_jwplayer: 基于JWplayer的RTMP/HTTP播放器 hls_sample_player_flowplayer: 基于FlowPlayer的HLS播放器(添加HLS plugin) hls_video_player_html5: ?基于HTML5的HLS/HTTP播放器 activex_vlc_player: ?基于VLC的ActiveX控件的播放器 注意:某些播放器直接打开html页面是不能工作的,需要把播放器放到Web服务器上。 (例如Apache或者Nginx) 版权声明:本文为博主原创文章,未经博主允许不得转载。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |