使用flv.js和Jessibuca方式播放流媒体 rtmp/rtsp

目录

flvjs与FLV有什么区别和联系?

vue中使用flvjs

封装一个flv函数

H265格式请使用jessibuca

flvjs与FLV有什么区别和联系?

flv.js
是 HTML5 Flash 视频(FLV)播放器,纯原生 JavaScript 开发,没有用到 Flash。由 bilibili 网站开源(Github)。

概览:

一个实现了在 HTML5 视频中播放 FLV 格式视频的 JavaScript 库。它的工作原理是将 FLV 文件流转码复用成 ISO BMFF(MP4 碎片)片段,然后通过 Media Source Extensions 将 MP4 片段喂进浏览器。

flv.js 是使用 ECMAScript 6 编写的,然后通过 Babel Compiler 编译成 ECMAScript 5,使用 Browserify 打包。

功能:

FLV 容器,具有 H.264 + AAC 编解码器播放功能
多部分分段视频播放
HTTP FLV 低延迟实时流播放
FLV 通过 WebSocket 实时流播放
兼容 Chrome, FireFox, Safari 10, IE11 和 Edge
十分低开销,并且通过你的浏览器进行硬件加速
FLV
HTTP FLV则是将RTMP封装在HTTP协议之上的,可以更好的穿透防火墙等。rtmp和http-flv的视频格式都是flv格式的,只是传输协议而不同。rtmp是tcp的传输协议,而http-flv是http长链接的传输协议。

总结
flvjs是一个H5播放器。FLV是一种协议。flvjs可以用于播放FLV格式的视频。

几种视频流比较。

协议http-flv  rtmp hls
传输方式 http流 tcp流 http流
视频封装格式 flv flv    Ts文件
延迟   低   低
数据分段连续流连续流 切片文件
h5播放 flv.js video.js hls.js


vue中使用flvjs


1.使用npm安装flv.js

npm install --save flv.js

2.新建FlvLive.vue文件,在文件中引入

import flvjs from 'flv.js'

<script>
            if (flvjs.isSupported()) { // 判断当前浏览器是否支持flv。
                var videoElement = document.getElementById('videoElement'); 
                var flvPlayer = flvjs.createPlayer({
                    type: 'flv',
                    // isLive: true,
                    // hasAudio: false,
                    url:'http://127.0.0.1:8000/live/abc.flv'
                });
                flvPlayer.attachMediaElement(videoElement); // 挂载video标签。
                flvPlayer.load(); 
                flvPlayer.play(); // 播放
            }
        </script>

封装一个flv函数

function playVideo(demo, url) {
  demo = document.getElementById(demo);
  if (demo) {
    demo.pause()
    demo.unload()
    demo.detachMediaElement()
    demo.destroy()
    demo = null
  }
  if (flvjs.isSupported()) {
    var flvPlayer = flvjs.createPlayer({
      type: 'flv',
      hasAudio: false,
      url: url
    });
    flvPlayer.attachMediaElement(demo);
    flvPlayer.load(); //加载
  }
  demo.play();


//断开流链接,若不断开会一直占用带宽
function destoryVideo() {
        this.flvPlayer.pause();
        this.flvPlayer.unload();
        this.flvPlayer.detachMediaElement();
        this.flvPlayer.destroy();
        this.flvPlayer = null;
      },

H265格式请使用Jessibuca

支持h265和h264格式

GitHub - langhuihui/jessibuca: Jessibuca是一款开源的纯H5直播流播放器

前台框架: GitHub - 648540858/wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等视频流转发到国标平台,支持rtsp/rtmp等推流转发到国标平台。

配置项:

let isShow = true
  window.flvPlayer = new Jessibuca({
    container: demo,
    autoWasm: true,
    background: "",
    controlAutoHide: false,
    debug: false,
    decoder: "static/js/jessibuca/decoder.js",
    forceNoOffscreen: true,
    hasAudio: false,
    hasVideo: true,
    heartTimeout: 5,
    heartTimeoutReplay: true,
    heartTimeoutReplayTimes: 3,
    hiddenAutoPause: false,
    hotKey: false,
    isFlv: false,
    isFullResize: false,
    isNotMute: false,
    isResize: false,
    keepScreenOn: false,
    loadingText: "请稍等, 视频加载中......",
    loadingTimeout: 10,
    loadingTimeoutReplay: true,
    loadingTimeoutReplayTimes: 3,
    openWebglAlignment: false,
    operateBtns: {
      fullscreen: isShow,
      screenshot: isShow,
      play: isShow,
      audio: isShow,
      record: false
    },
    recordType: "webm",
    rotate: 0,
    showBandwidth: false,
    supportDblclickFullscreen: false,
    timeout: 10,
    useMSE: true, //pc端true 渲染为canvas标签,false为video标签;移动端与之相反
    useOffscreen: false,
    useWCS: true,
    useWebFullScreen: false,
    videoBuffer: 0,
    wasmDecodeAudioSyncVideo: true,
    wasmDecodeErrorReplay: true,
    wcsUseVideoRender: true
  },);

Android端webView灰色按钮(默认的播放按钮)问题

android端自动起播在首帧出来之前会有一个灰色的播放按钮闪现,不同的手机或者android版本会略有不同,这个是webview中video内置的poster导致,前端无法隐藏

方案:

1.先设置useMSE:false保证是video标签渲染

1.设置Video的poster属性为一个透明的图片 推荐使用poster="https://via.placeholder.com/1x1"

document.querySelector('video').poster="https://via.placeholder.com/1x1"

// 透明 base64
<video poster="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" />
// or 
<video poster="https://via.placeholder.com/1x1" />
// or
<video poster="noposter" />

poster="" 直接给空字符串会被忽略,所以需要设置一个透明的图片或者noposter

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Qt软件开发是指使用Qt框架进行软件开发的过程。Qt是一种用于开发跨平台软件的工具,提供了丰富的图形界面和功能模块,能够快速开发高质量的软件应用。 基于FFmpeg设计的流媒体播放器是一种能够播放RTMP(Real-Time Messaging Protocol)和RTSP(Real-Time Streaming Protocol)流媒体协议的软件应用。FFmpeg是一个开源的多媒体框架,能够处理音频和视频编解码、格式转换等多种功能。 在使用Qt进行开发时,首先需要将FFmpeg框架集成到Qt项目中,以便能够使用FFmpeg提供的功能。可以通过静态库、动态库或者源码方式引入FFmpeg。接下来,需要设计并实现流媒体播放器的界面,可以使用Qt提供的控件来创建播放器的UI界面,包括播放按钮、进度条、音量控制等。 在播放器的逻辑功能上,需要使用FFmpeg解码视频和音频流,并将图像渲染到界面上,同时实现控制功能,如播放、暂停、快进快退等。 对于RTMP协议,需要建立与服务端的连接,并通过RTMP协议发送请求来获取媒体流,然后使用FFmpeg进行解码和播放。 对于RTSP协议,需要建立与服务器的连接,并通过RTSP协议的SDP描述文件来获取媒体流信息,然后使用FFmpeg进行解码和播放。 除了基本的播放功能外,还可以增加一些高级功能,如全屏、截图、倍速播放等,来满足不同用户的需求。 总之,基于FFmpeg设计的流媒体播放器(支持RTMPRTSP协议)是Qt软件开发中的一个具体应用场景,通过Qt和FFmpeg的结合,能够快速开发出功能丰富、稳定可靠的流媒体播放器软件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值