当前位置:首页 > JavaScript

js实现rtmp

2026-04-05 06:20:31JavaScript

RTMP 协议简介

RTMP(Real-Time Messaging Protocol)是 Adobe 开发的实时消息传输协议,常用于视频直播和音频流传输。现代浏览器已不再支持原生 RTMP 播放(依赖 Flash),但可通过转协议(如 HLS、WebRTC)或第三方库实现。

使用 flv.js 播放 RTMP 流

flv.js 是一个基于 JavaScript 的 FLV 播放器,通过 MSE(Media Source Extensions)将 RTMP 流转为 FLV 格式在浏览器中播放。

安装依赖
通过 npm 或直接引入 CDN:

npm install flv.js

<script src="https://cdn.jsdelivr.net/npm/flv.js/dist/flv.min.js"></script>

示例代码

js实现rtmp

<video id="videoElement" controls></video>
<script>
  if (flvjs.isSupported()) {
    const videoElement = document.getElementById('videoElement');
    const flvPlayer = flvjs.createPlayer({
      type: 'flv',
      url: 'http://example.com/live/stream.flv' // 替换为 RTMP 流转 FLV 的地址
    });
    flvPlayer.attachMediaElement(videoElement);
    flvPlayer.load();
    flvPlayer.play();
  }
</script>

使用 WebRTC 中转 RTMP

若需更低延迟,可通过服务端将 RTMP 转为 WebRTC 流,浏览器通过 RTCPeerConnection 接收。

服务端方案

客户端代码

js实现rtmp

const pc = new RTCPeerConnection();
pc.onicecandidate = (event) => {
  if (event.candidate) {
    // 发送 ICE Candidate 到信令服务器
  }
};
pc.ontrack = (event) => {
  const videoElement = document.getElementById('videoElement');
  videoElement.srcObject = event.streams[0];
};

// 通过信令服务器获取 SDP 并设置远程描述
pc.setRemoteDescription(remoteSdp);

使用 FFmpeg 转协议

在服务端通过 FFmpeg 将 RTMP 转为 HLS 或 DASH,浏览器通过 <video> 标签直接播放。

FFmpeg 命令示例

ffmpeg -i rtmp://example.com/live/stream -c:v libx264 -c:a aac -f hls -hls_time 4 -hls_playlist_type event output.m3u8

前端 HLS 播放
使用 hls.js

<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script>
  const video = document.getElementById('videoElement');
  if (Hls.isSupported()) {
    const hls = new Hls();
    hls.loadSource('http://example.com/output.m3u8');
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED, () => video.play());
  }
</script>

注意事项

  • 延迟:RTMP 原生延迟较低(2-5秒),转 HLS 后延迟增加(10-30秒)。
  • 兼容性:flv.js 依赖 MSE,支持 Chrome、Firefox 等现代浏览器。
  • 协议支持:浏览器无法直接播放 RTMP,必须通过转码或中转协议实现。

标签: jsrtmp
分享给朋友:

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…