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推流工具<转>的更多相关文章

  1. web flash推流录制测试研究

    用flash as3写了一段推流测试demo,参考srs_publisher和simplest_as3_rtmp_streamer.推流到srs2服务器,录制为flv文件.测试一轮结果如下: Web ...

  2. OBS桌面视频直播软件/推流工具使用指南

    OBS 操作指南 什么是OBS? Open Broadcaster Software 是一款好用的互联网流媒体直播内容输入作软件. OBS使用是否收费? 不收费,这个程序和它的源代码都是免费的. OB ...

  3. 免费Flash图表工具FusionChart

    图表显示是很多开发工作所必不可少的一项功能,今天我介绍一个前段时间发现的免费的Flash图表开发工具,可以通过Adobe Flash实现数据的图表化,动态化以及相互交互. FusionChart是一个 ...

  4. flash破解工具/flash decompiler

    如果想比较方便地参观浏览一下flash(swf)文件里面的内容,推荐使用国外免费开源的工具JPEXS Free Flash Decompiler. 传送门:https://www.free-decom ...

  5. FlashInspector 【Firefox浏览器插件,flash分析工具】

    Inspect flash(swf)'s DisplayObject with mouse. Overview the swf's DisplayObject list. Set the inspec ...

  6. EasyRTMP+EasyRTSPClient实现的多路(支持断线重连)RTSP转RTMP直播推流工具

    本文转自EasyDarwin开源团队成员Kim的博客:http://blog.csdn.net/jinlong0603/article/details/73441405 介绍 EasyRTMP是Eas ...

  7. web flash推流h264视频取消cbr

    flash as3.0 推视频H264关于视频质量 初次设置代码如下: h264Setting.setProfileLevel(H264Profile.BASELINE, H264Level.LEVE ...

  8. ESP32 - 乐鑫官方Flash烧录工具使用

    第一步:打开软件flash_download_tools_v3.6.6.exe 第二步:点击ESP32 DownloadTool,启动我们板子的烧录工具 第三步:按照下图顺序,加载bin_prog目录 ...

  9. ffmpeg+EasyDSS流媒体服务器实现稳定的rtmp推流直播

    本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/74783269 需求 在做EasyDSS开发时,总 ...

随机推荐

  1. PAT 乙级 1031 查验身份证(15) C++版

    1031. 查验身份证(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 一个合法的身份证号码由17位地区. ...

  2. R语言——实验5-聚类分析

    针对课件中的例子自己实现k-means算法 调用R语言自带kmeans()对给定数据集表示的文档进行聚类. 给定数据集: a)         数据代表的是文本信息. b)        第一行代表词 ...

  3. Zabbix 告警内容配置

    #配置媒介告警类型 #----------------------------------------------------------------------------------------- ...

  4. Socket传输简单的信息以及粘包问题的解决

    一.简单的socket程序——传输简短文字: # -*- coding: utf-8 -*- # -*- Author: WangHW -*- import socket whw_client = s ...

  5. 模拟远程SSH执行命令的编解码说明

    模拟一个SSH“远程”执行命令并获取命令结果的一个程序: 1.在C/S架构下,当客户端与服务器建立连接(这里以TCP为例)后,二者可以不断的进行数据交互.SSH远程可以实现的效果是客户端输入命令可以在 ...

  6. Spark2.0.0源码编译

    Hive默认使用MapReduce作为执行引擎,即Hive on mr,Hive还可以使用Tez和Spark作为其执行引擎,分别为Hive on Tez和Hive on Spark.由于MapRedu ...

  7. VS远程调试与附加调试

    使用场景 假如你要开发的程序需要运行在独特的硬件上,比如:服务器,然而这个"独特的硬件"却不能给你装VS,这时候远程调试就登场了. 测试工具/环境一览 Key Value VS版本 ...

  8. CVPR 2019 | 用异构卷积训练深度CNN:提升效率而不损准确度

    对于深度卷积神经网络而言,准确度和计算成本往往难以得兼,研究界也一直在探索通过模型压缩或设计新型高效架构来解决这一问题.印度理工学院坎普尔分校的一篇 CVPR 论文则给出了一个新的思路——使用异构的卷 ...

  9. es6基础(1)--声明

    function test(){ //let只在块作用域有效 for(let i=1;i<3;i++){ console.log(i); } //es6严格模式,变量未声明,不可以用 //con ...

  10. day20re模块 正则表达式

    re模块,正则1 re是什么 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法. 就是用来描述一类事物的规则.就是一些带有特殊含义的符号或者符号的组合.    作 ...