flash推流工具<转>
https://github.com/young-cowboy/young-cowboy.github.io
https://www.cnblogs.com/xiaoniuzai/p/7129036.html
==============================================
示例:https://young-cowboy.github.io/gallery/rtmp_client/index.html
在国内的直播场景中通常使用,rtmp协议作为推流协议。RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写,由Adobe公司开发。
想要在浏览器中实现rtmp推流,就必须借助flash的帮助。而且HTML5规范里面并没有针对RTMP的实现。毕竟这个协议标准是Adobe公司制定的。
在网上搜索了一些资料。发现有一个rtmp-streamer的库 https://github.com/chxj1992/rtmp-streamer 。初略了看了一下库里面有一个swf文件用来实现RTMP推流。
如下是我使用库的里swf文件实现的rtmp推流 demo https://young-cowboy.github.io/gallery/rtmp_client/index.html
讲解
定义一个object
<object>
<embed
id="rtmp-streamer"
src="./RtmpStreamer.swf"
bgcolor="#000000"
quality="high"
width="750"
height="400"
allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"></embed>
</object>
获取这个object 对象
this.streamer = document.getElementById('rtmp-streamer');
设置推流地址:
this.streamer.publish(url, name);
这里有2个参数,一个是url,一个是name,比如我们的rtmp地址为
rtmp://xxx-x.alicdn.com/linklive/27xxxxx9_14993xxx90?auth_key=150xx19-0-0-x065bc80exxxx5fe6b813
那么url为
rtmp://xxx-x.alicdn.com/linklive
name为
27xxxxx9_14993xxx90?auth_key=150xx19-0-0-x065bc80exxxx5fe6b813
你可以用如下的办法进行拆分。
let urls = rtmp.split('/');
let name = urls.pop();
let url = urls.join("/");
this.streamer.publish(url, name);
阅读源码
看了一下swf的源码:https://github.com/chxj1992/rtmp-streamer/blob/master/RtmpStreamer.as 代码也不多,就200行。
主要的模块有
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.media.Camera;
import flash.media.Microphone;
分别获取了网络连接,网络流,视频摄像头和麦克风。
设置好了摄像头和音麦克风的配置后把这两个对象attach到NetStream
ns = new NetStream(nc);
ns.attachCamera(cam);
ns.attachAudio(mic);
建立流推送以后把摄像流用视频播放器播放
private function getPlayer():Video {
vidPlayer = new Video(_screenWidth, _screenHeight);
vidPlayer.x = _screenX;
vidPlayer.y = _screenY;
return vidPlayer;
}
vidPlayer = getPlayer();
vidPlayer.attachCamera(cam);
addChild(vidPlayer);
对于暴露出去的给JavaScript用的方法则用 ExternalInterface 实现
ExternalInterface.addCallback("setScreenSize", setScreenSize);
ExternalInterface.addCallback("setScreenPosition", setScreenPosition);
ExternalInterface.addCallback("setCamMode", setCamMode);
ExternalInterface.addCallback("setCamFrameInterval", setCamFrameInterval);
ExternalInterface.addCallback("setCamQuality", setCamQuality);
ExternalInterface.addCallback("setMicQuality", setMicQuality);
ExternalInterface.addCallback("setMicRate", setMicRate);
ExternalInterface.addCallback("publish", publish);
ExternalInterface.addCallback("play", playVideo);
ExternalInterface.addCallback("disconnect", disconnect);
ExternalInterface.call("setSWFIsReady");
......
路漫漫其修远兮,吾将上下而求索。
flash推流工具<转>的更多相关文章
- web flash推流录制测试研究
用flash as3写了一段推流测试demo,参考srs_publisher和simplest_as3_rtmp_streamer.推流到srs2服务器,录制为flv文件.测试一轮结果如下: Web ...
- OBS桌面视频直播软件/推流工具使用指南
OBS 操作指南 什么是OBS? Open Broadcaster Software 是一款好用的互联网流媒体直播内容输入作软件. OBS使用是否收费? 不收费,这个程序和它的源代码都是免费的. OB ...
- 免费Flash图表工具FusionChart
图表显示是很多开发工作所必不可少的一项功能,今天我介绍一个前段时间发现的免费的Flash图表开发工具,可以通过Adobe Flash实现数据的图表化,动态化以及相互交互. FusionChart是一个 ...
- flash破解工具/flash decompiler
如果想比较方便地参观浏览一下flash(swf)文件里面的内容,推荐使用国外免费开源的工具JPEXS Free Flash Decompiler. 传送门:https://www.free-decom ...
- FlashInspector 【Firefox浏览器插件,flash分析工具】
Inspect flash(swf)'s DisplayObject with mouse. Overview the swf's DisplayObject list. Set the inspec ...
- EasyRTMP+EasyRTSPClient实现的多路(支持断线重连)RTSP转RTMP直播推流工具
本文转自EasyDarwin开源团队成员Kim的博客:http://blog.csdn.net/jinlong0603/article/details/73441405 介绍 EasyRTMP是Eas ...
- web flash推流h264视频取消cbr
flash as3.0 推视频H264关于视频质量 初次设置代码如下: h264Setting.setProfileLevel(H264Profile.BASELINE, H264Level.LEVE ...
- ESP32 - 乐鑫官方Flash烧录工具使用
第一步:打开软件flash_download_tools_v3.6.6.exe 第二步:点击ESP32 DownloadTool,启动我们板子的烧录工具 第三步:按照下图顺序,加载bin_prog目录 ...
- ffmpeg+EasyDSS流媒体服务器实现稳定的rtmp推流直播
本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/74783269 需求 在做EasyDSS开发时,总 ...
随机推荐
- 学习笔记之Git / Gitflow / TortoiseGit
Git - Wikipedia https://en.wikipedia.org/wiki/Git Git (/ɡɪt/) is a version control system for tracki ...
- 廖雪峰Java2面向对象编程-2数据封装-1方法重载
方法重载 方法重载Overload是指:多个方法的方法名相同,但各自的参数不同 参数的个数不同 参数的类型不同 参数位置不同 方法返回值类型通常都是相同的 目的:相同功能的方法使用同一名字,便于调用 ...
- 1124 Raffle for Weibo Followers (20 分)
1124 Raffle for Weibo Followers (20 分) John got a full mark on PAT. He was so happy that he decided ...
- Hibernate SQL
SQL查询: 5.2之后的版本: NativeQuery<Order> sqlQuery = session.createNativeQuery("select * from t ...
- session依赖cookie,如果浏览器禁用了cookie呢?
我们都知道session依赖cookie,因为服务器需要在每次请求中获取sessionId,然后找到客户端的session对象,如果浏览器禁用了cookie呢? 这个时候,就需要用到URL重写了,这种 ...
- h5登录页面
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 《Linux 性能及调优指南》2.4 基准工具
翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...
- Python开发之AJAX
一.概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用:一个简单操作 ...
- JIRA敏捷sprint需求统计设置
1.JIRA->My Dashboard ->添加它的过滤条件 2.过滤条件产生,将sql拷贝至步骤1编辑的JQL中
- suricata 关键字补充说明
基本关键字 1.msg(对匹配到的规则的说明,第一部分约定用大写字母表示,msg始终是签名的第一个关键字) 注意:msg中必须转义以下字符: ; \ " msg :“ATTACK-RESPO ...