flv拉流在项目中如何使用(一)

简介: 最近做的项目里面用到通过前端flv.js拉流播放直播视频(实时视频);这里给大家介绍一下流程,首先是前端发送请求后端给返回一个直播流指定地址,然后前端把这个地址通过flv处理放到video容器中进行播放;

一.项目需求:

最近做的项目里面用到通过前端flv.js拉流播放直播视频(实时视频);这里给大家介绍一下流程,首先是前端发送请求后端给返回一个直播流指定地址,然后前端把这个地址通过flv处理放到video容器中进行播放;


二.flv相关知识点

1.直播与点播:直播就是具有实时性的视频,比如我们天天看的直播,他都是现场直播的 直播有一个东西叫流数据,这个数据是实时的,他可以通过http请求拿到,也可以用websocket拿,看需求。点播就是已经整理好的视频我们直接放到video标签就可以了,一般是mp4格式,我们只要放在video标签里面浏览器就会给我们处理好一切。

2.选flv的原因:前面也说了,直播需要实时性,延迟当然越短越好,决定视频延迟的因素有好多,其中一条就是视频本身的大小,我们最常见的mp4格式的视频,对前端来说mp4兼容性是最好的,但是mp4有一个缺点就是体积比较大,解析会复杂一些,在直播场景就不能直接用mp4了,而flv不一样,他的头部文件非常小,结构简单,解析就相对比较快,在直播场景很有优势。

3.除了flv之外还有其他格式:

          1)RTM:底层是基于TCP协议的,在浏览器端依赖Flash 目前浏览器是禁用Flash的, 所以不适合

          2)HTTP-FLV:基于HTTP流式IO传输FLV,依赖浏览器支持播放FLV

          3)HLS:全名Http Live Streaming,苹果提出基于HTTP的流媒体传输协议。HTML5可以直接打开播放 对应的视频格式是m3u8,看过快播的兄弟应该了解这个格式,他有个致命的缺点延迟高

          4)RTP:基于UDP协议,延迟1秒,浏览器不支持 基本不用

4.flv又分为HTTP-FLV和Websocket-FLV,他们有啥区别呢

        前面我们也提到过直播流就是实时传输,需要持续的推拉流,流数据又是实时性德,遇到这种情况我们肯定想到的是websocket 因为它就是长连接,前后端实时互传。

        HTTP-Flv用的是fetch请求方法,他也是基于http的,他是一种前端向后端发送请求,获取指定的资源 他可以说是一种黑科技,他就是天生处理流数据的,性能很好,使用起来也很方便。


三.下面我们根据官网来建一个flv小demo.


官网地址:https://github.com/Bilubili/flv.js/

import flvjs from "flv.js"
if (flvjs.insupported()) {
   // 获取视频容器video的dom
   var videoEl = document.getElementById('videoEl');
   // 配置flv播放器
   var flvPlayer = flvjs.createPlayer({
        type: "flv", // 媒体类型 flv或者mp4 默认flv
        cors: true, // 是否跨域 用canvas截图就需要跨域
        hasAudio: false, //是否有音频
        hasVideo: true, // 是否有视频
        // 指定流地址 可以http(https)或者ws(wss)
        url: 'http://test.stream.com/fetch-media.flv',
        isLive: true, //是否是直播流 默认true
    })
      // 挂载流 将拉到的流放进视频容器中
      flvPlayer.attachMediaElement(videoEl);
      // 加载流
      flvPlayer.load();
      // 播放流
      flvPlayer.play();
  }

相关文章
|
3月前
|
应用服务中间件 Linux nginx
FFmpeg学习笔记(一):实现rtsp推流rtmp以及ffplay完成拉流操作
这篇博客介绍了如何使用FFmpeg实现RTSP推流到RTMP服务器,并使用ffplay进行拉流操作,包括在Windows和Linux系统下的命令示例,以及如何通过HTML页面显示视频流。
682 0
|
6月前
|
Web App开发 缓存 编解码
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
《FFmpeg开发实战》书中介绍了轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适用于复杂直播场景。SRS是一款强大的开源流媒体服务器,支持多种协议,起初为RTMP,现扩展至HLS、SRT等。在FFmpeg 6.1之前,推送给SRS的HEVC流不受支持。要播放RTMP流,Android应用可使用ExoPlayer,需在`build.gradle`导入ExoPlayer及RTMP扩展,并根据URL类型创建MediaSource。若SRS播放黑屏,需在配置文件中开启`gop_cache`以缓存关键帧。
188 2
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
|
5月前
|
编解码 Linux 开发工具
iOS平台如何实现RTSP|RTMP播放端录像?
我们在做RTSP、RTMP直播播放器的时候,有个比较重要的功能,就是拉流端实时录像,包括设置单个录像文件大小、文件前缀、audio转AAC、只录制视频或只录制音频、开始录像、停止录像事件状态回调等。
108 5
|
7月前
|
数据安全/隐私保护 索引 Python
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
138 0
|
网络协议 算法 网络性能优化
【流媒体】推流与拉流简介
【流媒体】推流与拉流简介
540 0
|
8月前
|
网络协议 应用服务中间件 Linux
【音视频 ffmpeg 学习】 RTMP推流 mp4文件
【音视频 ffmpeg 学习】 RTMP推流 mp4文件
|
8月前
[音视频 ffmpeg] 复用推流
[音视频 ffmpeg] 复用推流
|
容器
flv拉流在项目中如何使用(二)
这里主要是我们不能使用video容器自带的暂停和播放按钮了,我们要隐藏原来的自己实现暂停和播放。暂停和播放说白了就是断流和重新拉流
171 1
|
Linux 开发工具 图形学
Unity下如何实现RTMP或RTSP播放端录像?
Unity下如何实现RTMP或RTSP播放端录像?
279 0
|
编解码 网络协议 Android开发
Android平台RTMP|RTSP直播播放器功能进阶探讨
很多开发者在跟我聊天的时候,经常问我,为什么一个RTMP或RTSP播放器,你们需要设计那么多的接口,真的有必要吗?带着这样的疑惑,我们今天聊聊Android平台RTMP、RTSP播放器常规功能,如软硬解码设置、实时音量调节、实时快照、实时录像、视频view翻转和旋转、画面填充模式设定、解码后YUV、RGB数据回调等:
203 0