Flash/Flex学习笔记(12):FMS 3.5之如何做视频实时直播

本文涉及的产品
视频点播 VOD,流量+存储+转码
简介: 硬件条件:一个摄像头 + 一台FMS服务器即可 原理:摄像头实时采集视频源,然后推送到FMS服务器,其它客户从FMS上获取视频流。 需要做二个fla,一个用于向FMS服务端推送视频源(即发送端),一个用于从FMS服务器获取并播放视频(即接收端) Server.

硬件条件:一个摄像头 + 一台FMS服务器即可

原理:摄像头实时采集视频源,然后推送到FMS服务器,其它客户从FMS上获取视频流。

需要做二个fla,一个用于向FMS服务端推送视频源(即发送端),一个用于从FMS服务器获取并播放视频(即接收端)

Server.fla关键代码:

var cam:Camera;
var vod:Video;
var intervalId:uint;
var intelvalTimes:uint=0;
var isWorked=false;
var nc:NetConnection;
var ns:NetStream;

btnPublish.addEventListener(MouseEvent.CLICK,btnPublishClick);
lblMsg.text = "连接好摄像头后,\n点击下面的按钮"

//摄像头有活动时,被触发
function camActivityHandler(e:ActivityEvent) {
	trace(e);
	if (!isWorked) {
		intervalId=setInterval(checkCallBack,100);
	}
}

function checkCallBack():void {
	intelvalTimes+=1;
	trace(intelvalTimes);
	if (cam.currentFPS>0) {
		lblMsg.text="摄像头工作正常!";
		isWorked=true;
		clearInterval(intervalId);
		ns.publish("myCamera", "live");
		//同时处理本地播放
		vod = new Video();
		vod.attachCamera(cam);
		vod.height=cam.height;
		vod.width=cam.width;
		vod.x = 45;
		vod.y = 15;
		addChild(vod);
	} else {
		if (intelvalTimes>=10) {//持续检测2秒,仍然无图象的话,认为"设备无法使用(占用中)"
			lblMsg.text="设备无法使用(有可能被占用)";
			clearInterval(intervalId);
		}
	}
}

//用户选择"同意"或"不允许"使用摄像头时触发
function statusHandler(e:StatusEvent) {
	trace(e);
	if (e.code=="Camera.Muted") {
		lblMsg.text="您不允许使用摄像头!";
	} else if (e.code == "Camera.Unmuted") {
		lblMsg.text="摄像头视频获取中...";
	}
}

//推送按钮点击事件
function btnPublishClick(e:MouseEvent) {
	nc = new NetConnection();
	nc.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler);
	nc.connect("rtmp://fms服务器ip地址/camlive");
}

//连接状态处理代码
function NetStatusHandler(event:NetStatusEvent):void {
	trace(event.info.code);
	if (event.info.code=="NetConnection.Connect.Success") {		
		cam=Camera.getCamera();
		if (cam==null) {
			this.lblMsg.text="未安装摄像头!";
			return;
		}
		cam.addEventListener(StatusEvent.STATUS, statusHandler);
		cam.addEventListener(ActivityEvent.ACTIVITY,camActivityHandler);
		ns=new NetStream(nc);
		ns.attachCamera(cam);
	}
}

 

Client.fla关键代码:

var nc:NetConnection;
var ns:NetStream;
var vod:Video;

btnReceive.addEventListener(MouseEvent.CLICK,function(){
	nc = new NetConnection();
	nc.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler);
	nc.connect("rtmp://fms服务器ip地址/camlive");
})

//连接状态处理代码
function NetStatusHandler(event:NetStatusEvent):void {
	trace(event.info.code);
	if (event.info.code=="NetConnection.Connect.Success") {
		lblMsg.text = "正在获取视频..."
		ns=new NetStream(nc);
		ns.addEventListener(NetStatusEvent.NET_STATUS,nsNetStatusHandler);
		ns.play("myCamera");
		vod = new Video();
		vod.x=45;
		vod.y=15;
		vod.height=120;
		vod.width=160;
		vod.attachNetStream(ns);
		addChild(vod);		
	}
}

function nsNetStatusHandler(e:NetStatusEvent){
	trace(e.info.code);
}

在线演示:

推送端
接收端

目录
相关文章
|
1月前
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
120 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
|
2月前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
EasyPusher是一款国产RTSP直播录制推流客户端工具,支持Windows、Linux、Android及iOS等系统。尽管其GitHub仓库(安卓版:https://github.com/EasyDarwin/EasyPusher-Android)已多年未更新,但通过一系列改造,如升级SDK版本、迁移到AndroidX、指定本地NDK版本及更新Gradle版本等,仍可在最新Android Studio上运行。以下是针对Android Studio Dolphin版本的具体改造步骤。
58 3
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
|
30天前
|
传感器 数据可视化 网络协议
DIY可视化整合MQTT生成UniApp源码
DIY可视化整合MQTT生成UniApp源码
42 0
|
6月前
|
Linux C++ iOS开发
VLC源码解析:视频播放速度控制背后的技术
VLC源码解析:视频播放速度控制背后的技术
558 0
|
存储 编解码 应用服务中间件
直播平台源码开发搭建APP的DASH协议:流媒体技术其中一环
通过我们对直播平台源码APP“DASH”协议的仔细讲解,大家不难看出DASH协议是流媒体技术的其中关键一环,起到了优化流媒体传输的能力,保证直播平台源码APP用户不必在乎设备与网络带宽因素,可以稳定流畅的使用直播与短视频等功能,方便了用户,提高了直播平台源码APP的质量,也是直播平台源码APP不可或缺的一环。
直播平台源码开发搭建APP的DASH协议:流媒体技术其中一环
|
编解码
播放器实战--音视频同步方案
播放器实战--音视频同步方案
179 0
|
缓存 前端开发 API
优酷播放体验优化实战(七)--优酷高性能弹幕渲染技术大揭秘
优酷高性能弹幕渲染引擎的目标,是在全平台实现对弹幕内容的高效渲染。渲染的内容包括文本、emoji、普通图片、apng动图和3D mesh等元素,并且支持节奏弹幕、燃弹幕、弹幕穿人、流光弹幕等各种特效玩法。下面,将对优酷高性能弹幕渲染引擎所涉及的技术做一次大揭秘。
1476 0
优酷播放体验优化实战(七)--优酷高性能弹幕渲染技术大揭秘
|
域名解析 编解码 缓存
优酷播放体验优化实战(一)--实战概览
《优酷播放体验优化实战》系列文章持续放送中。 本文将从不同类型播放问题出发,阐述优酷技术团队在播放体验优化实战中的经验
639 0
优酷播放体验优化实战(一)--实战概览
|
Web App开发 移动开发 编解码
没有Flash如何做直播?
有些人呐,真是不见棺材不落泪,N(>=3)年前Adobe官宣了2020年底就不支持Flash了,最近发现非常多的朋友,到了真正完全不能用时,才考虑如何逃生,在群里一顿狂问“没有Flash了怎么播放RTMP”,“该选HTTP-FLV还是WebRTC”,“用什么播放器播HTTP-FLV”。 本文只发一次,完整解决方案再啰嗦一遍,恕我不在群里回答这种问题了,自己花时间好好看吧,身为搞直播的研发工程师,总不能火烧了眉毛才开始想办法吧,各位耗子尾汁吧。
477 0
没有Flash如何做直播?
|
Android开发 开发者 iOS开发
“一个APP竟然可以适配这么多设备?!”《优酷响应式布局技术全解析》开放下载
本书分享优酷应用技术团队使用响应式布局来实现“一个APP适配不同设备”的技术思考和实践。
27747 0
“一个APP竟然可以适配这么多设备?!”《优酷响应式布局技术全解析》开放下载
下一篇
无影云桌面