由于项目的需求,要在web上实现视频通话的需求。
现成的方案有WebRTC,基于浏览器的成熟方案,但是这个方案和公司项目需求有几个点冲突。
后来考虑到基于flash的方案。
参考雷神的博客 simplest_as3_rtmp_streamer
http://blog.csdn.net/leixiaohua1020/article/details/43936141

本机软件环境Win7_64位下,IE11,Flash Builder 4.7, ffplay播放
摄像头采用罗技C930e,麦克风用摄像头自带的。
服务器采用SRSv2.0_r2

编码采用ActionScript3脚本语言,flash.media.Video采集视频,flash.media.Microphone采集音频,
flash.net.NetConnection连接srs服务器,flash.net.NetStream推流。

测试在局域网内视频通话。
视频采集分辨率为1280*720 30fps 200Kbps H264编码。
音频采用44100采样率 单声道 40kbps nellymoser编码。
局域网内测试延迟如下:

 

代码改写自雷神博客,服务器采用srs,特此感谢雷神,感谢Winlin。

 package {
import flash.display.MovieClip;
import flash.events.NetStatusEvent;
import flash.media.Camera;
import flash.media.H264Level;
import flash.media.H264Profile;
import flash.media.H264VideoStreamSettings;
import flash.media.Microphone;
import flash.media.SoundCodec;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream; public class media extends MovieClip
{
private var nc:NetConnection;
private var ns:NetStream;
private var nsPlayer:NetStream;
private var vid:Video;
private var vidPlayer:Video;
private var cam:Camera;
private var mic:Microphone; private var screen_w:int=384;
private var screen_h:int=216; public function media()
{
nc = new NetConnection();
nc.client = {};
nc.client.onBWDone = function():void {};
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.connect("rtmp://192.168.100.168/testas3/");
trace("NetConnection !!!");
} private function onNetStatus(event:NetStatusEvent):void{
trace(event.info.code);
if(event.info.code == "NetConnection.Connect.Success"){
publishCamera();
displayPublishingVideo();
}
} private function publishCamera(): void{ //Cam
cam = Camera.getCamera();
cam.setMode(1280, 720, 30);
cam.setKeyFrameInterval(30);
cam.setQuality(200000, 90); var x264profile:String = H264Profile.MAIN; // H264Profile.BASELINE;
var x264level:String = H264Level.LEVEL_4_1;
var h264setting:H264VideoStreamSettings = new H264VideoStreamSettings();
h264setting.setProfileLevel(x264profile, x264level); //Mic
mic = Microphone.getMicrophone();
mic.codec = SoundCodec.NELLYMOSER;//SoundCodec.SPEEX
mic.setLoopBack(false);
mic.gain=55;
mic.setUseEchoSuppression(true);
mic.rate = 44; ns = new NetStream(nc);
ns.client = {};
ns.addEventListener(NetStatusEvent.NET_STATUS, function(evt:NetStatusEvent):void {
trace ("NetStream: code=" + evt.info.code);
// TODO: FIXME: failed event.
}); //H.264 Setting
ns.videoStreamSettings = h264setting;
ns.attachCamera(cam);
ns.attachAudio(mic);
ns.publish("1111", "live");
} private function displayPublishingVideo():void {
vid = new Video(screen_w, screen_h);
vid.x = 20;
vid.y = 20;
vid.attachCamera(cam);
addChild(vid);
}
}
}

基于flash的web视频对讲直播测试的更多相关文章

  1. 推荐一款国产优秀的基于 AI 的 Web 自动化测试工具——kylinTOP 测试与监控平台

    对于于一般的传统的自动化测试工具,如:Selenium,robotFramework,QTP等.QTP可以通过操作录制生成自动化用例脚本.生成的脚本与Selenium.robotFramework类似 ...

  2. 前端Web浏览器基于Flash如何实时播放监控视频画面(四)之使用videoJs‘拉流’

    本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 下载videoJs 对于Video.js 5.x及更低版本,Flash技术(v ...

  3. 前端Web浏览器基于Flash如何实时播放监控视频画面(前言)之流程介绍

    [关键字:前端浏览器如何播放RTSP流画面.前端浏览器如何播放RTMP流画面] 本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 考虑到视频延 ...

  4. iOS直播-播放基于RTMP协议的视频

    iOS直播-播放基于RTMP协议的视频 流媒体协议介绍 1. 伪流媒体: 渐进式下载 : 边下边存, 文件会保存 使用http协议,也能够实现视频播放, 也能快进快退等, 体验上跟流媒体很像. 优酷, ...

  5. 基于Flask框架搭建视频网站的学习日志(三)之原始web表单

    基于Flask框架搭建视频网站的学习日志(三)1.原始Web 表单 本节主要用于体验一下前端后端直接数据的交互,样例不是太完善,下一节会加入Flash处理,稍微完善一下页面 (备注:建议先阅读廖雪峰老 ...

  6. 超级好用的前端开发测试Chrome插件-基于REST的Web服务客户端

    基于REST的Web服务客户端是一款功能强大的谷歌浏览器插件,使用基于REST的Web服务客户端(模拟REST客户端)可以让用户使用谷歌浏览器模拟REST请求来测试REST风格. 基于REST的Web ...

  7. 最简单的基于Flash的流媒体示例:网页播放器(HTTP,RTMP,HLS)

    http://blog.csdn.net/leixiaohua1020/article/details/43936415 ======================================= ...

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

    ===================================================== Flash流媒体文章列表: 最简单的基于Flash的流媒体示例:RTMP推送和接收(Acti ...

  9. 基于Deep Learning 的视频识别方法概览

    深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者.互联网视频在最近几年也特别火,短视频.视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器.当这两个火碰在一起,会 ...

随机推荐

  1. hihoCoder 1051 补提交卡(贪心,枚举)

    #1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过 ...

  2. 状压dp入门第一题 poj3254

    题目链接 http://poj.org/problem?id=3254 转自http://blog.csdn.net/harrypoirot/article/details/23163485 #inc ...

  3. 【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)

    在Vue中的项目,基于VUX-UI开发,一个常见的需求: 1.金额输入框 2.弹出数字键盘 3.仅支持输入两位小数,限制最大11位数,不允许0开头 后续:与UI沟通后, 思路调整为限制输入,并减少正则 ...

  4. kafka数据迁移实践

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:mikealzhou 本文重点介绍kafka的两类常见数据迁移方式:1.broker内部不同数据盘之间的分区数据迁移:2.不同broker ...

  5. Python scrapy------分类获取美团整站数据

    欢迎联系讨论:qq:1170370113 以下是我们获取美团页面的城市信息 获取到了城市信息以后我们可以进行分类保存,以便于后续能够分类获取数据 获取我们需要城市的景区的所有相关id并且进行保存 最后 ...

  6. 独立服务器 云主机、VPS以及虚拟主机三者之间的区别是什么?哪个更好?

    https://www.zhihu.com/question/21442353#answer-2442764 云主机(如 EC2,[1] )和 VPS (如 Linode,[2])都是完整的操作系统( ...

  7. MySQL密码忘了怎么办?MySQL重置root密码方法

    本文主要介绍Windows和Linux系统下忘记密码重置root密码的方法,需要的朋友可以参考下. MySQL有时候忘记了root密码是一件伤感的事.这里提供Windows 和 Linux 下的密码重 ...

  8. vue-cli的webpack模版项目配置解析

    上一篇文章已经分析了build/dev-server.js,里面使用到了其他config文件. 那么我们这篇文章,按着dev-server.js的使用顺序,来分析下其他文件. 首选,调用check-v ...

  9. 为什么要进行URL编码

    我们都知道Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割.如"?name1=value1&a ...

  10. Oracle问题之字符集问题,登陆sqlplus出现问号

    退出sql SET NLS_LANG=AMERICAN_AMERICA.ZHS16GBK show parameter nls_la