当前位置:首页 > 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实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…