最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript

=====================================================

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播放RTMP

ActionScript播放RTMP流媒体的流程如下图所示。

从图中可以看出,流程可以分成两部分:播放和显示。

播放

播放分成3步:

(1)建立NetConnection(2)建立NetStream(3)调用NetStream的play()方法

前2步分别建立了RTMP规范中的两个逻辑结构:NetConnection和NetStream。NetConnection代表服务器端应用程序和客户端之间基础的连通关系。NetStream代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个NetConnection,但是基于该连接可以创建很多NetStream。这两个结构的结构如下图所示。

显示

显示部分将播放的视频显示在“舞台”上。这一部分通过创建一个Video对象实现。

ActionScript推送RTMP

ActionScript推送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播放器,代码如下所示。

/** * 最简单的基于ActionScript的RTMP播放器 * Simplest AS3 RTMP Player * * 雷霄骅 Lei Xiaohua * leixiaohua1020@126.com * 中国传媒大学/数字电视技术 * Communication University of China / Digital TV Technology * * * 本程序使用ActionScript3语言完成,播放RTMP服务器上的流媒体 * 是最简单的基于ActionScript3的播放器。 * * This software is written in Actionscript3, it plays stream * on RTMP server * It’s the simplest RTMP player based on ActionScript3. * */package {import flash.display.Sprite;import flash.net.NetConnection;import flash.events.NetStatusEvent;import flash.events.AsyncErrorEvent;import flash.net.NetStream;import flash.media.Video;public class simplest_as3_rtmp_player extends Sprite{var nc:NetConnection;var ns:NetStream;var video:Video;public function simplest_as3_rtmp_player(){nc = new NetConnection();nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);nc.connect("rtmp://localhost/live");}private function netStatusHandler(event:NetStatusEvent):void{trace("event.info.level: " + event.info.level + "\n", "event.info.code: " + event.info.code);switch (event.info.code){case "NetConnection.Connect.Success":doVideo(nc);break;case "NetConnection.Connect.Failed":break;case "NetConnection.Connect.Rejected":break;case "NetStream.Play.Stop":break;case "NetStream.Play.StreamNotFound":break;}}// play a recorded stream on the serverprivate function doVideo(nc:NetConnection):void {ns = new NetStream(nc);ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);video = new Video(640,480);video.attachNetStream(ns);ns.play("myCamera");addChild(video);}// create a playlist on the server/*private function doPlaylist(nc:NetConnection):void {ns = new NetStream(nc);ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);video = new Video();video.attachNetStream(ns);// Play the first 3 seconds of the videons.play( "bikes", 0, 3, true );// Play from 20 seconds onns.play( "bikes", 20, -1, false);// End on frame 5ns.play( "bikes", 5, 0, false );addChild(video);}*/}}

simplest_as3_local_player

走自己的路,让人家去说吧。

最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript

相关文章:

你感兴趣的文章:

标签云: