BiliBili有一个大神,开源了一套js,名字叫做flv.js
中间尝试了很多东西,
首先rtmp推流,然后需求是flv可以播放,然后要用nginx,所以下载了nginx for windows版本
然后ffmpeg推流失败之后,因为需要支持flv的视频流,所以nginx需要一个模块名字叫做nginx-rtmp-module-master
所以到github上找到相关代码发现,下载,编译,然后下载依赖项,下载mingw,下载mysys最后编译失败,因为mingw下不了
然后用linux发现编译失败
至此这条路失败。
中间回想目的,客户端推流,服务端转发,然后再用浏览器播放,
这里选择了nodejs然后加入了模块nodemediaserver。
然后下载了obs studio中间下载了一个名字叫做OBS-Studio-22.0.2-Full-Installer-x64 version:22.0.2
然后做推流,当然我换成了ffmpeg推流发现流的名字就是所谓的第二个参数
然后下载flv.js,放到public目录
根据功能,发现推流之后,转成flv的http在线,直接把地址写成:
//url: 'http://localhost:8000/live/s.flv'
这个是websocket写法其中live是路径,s是流的名称
url: 'ws://localhost:8000/live/s.flv'
ffmpeg的推流写法:rtmp://localhost:1938/live/s.flv
参考地址:https://github.com/illuspas/Node-Media-Server
使用obs推流到node_media_server地址:
https://www.jianshu.com/p/95c820473e9f
ffmpeg命令:
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -pix_fmt yuv420p -vcodec libx264 -g 19 -s 1280x720 -r 15 -q 10 -ar 44100 -ac 2 -tune zerolatency -preset ultrafast -f flv "rtmp://localhost:1935/live/s"
pause
测试网页,放入node_media_server的public 目录
DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>直播title>
head>
<body>
<script src="https://cdn.bootcss.com/flv.js/1.4.0/flv.min.js">script>
<video id="videoElement" width="100%" controls>video>
<script>
if (flvjs.isSupported()) {
var videoElement = document.getElementById('videoElement');
var flvPlayer = flvjs.createPlayer({
type: 'flv',
enableWorker: true, //浏览器端开启flv.js的worker,多进程运行flv.js
isLive: true, //直播模式
hasAudio: true, //关闭音频
hasVideo: true,
stashInitialSize: 128,
enableStashBuffer: true, //播放flv时,设置是否启用播放缓存,只在直播起作用。
//url: 'http://localhost:8000/live/s.flv'
url: 'ws://localhost:8000/live/s.flv'
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
flvPlayer.play();
}
script>
body>
nodejs代码:
const { NodeMediaServer } = require('node-media-server'); const config = { rtmp: { port: 1935, chunk_size: 60000, gop_cache: true, ping: 60, ping_timeout: 30 }, http: { port: 8000, allow_origin: '*' } }; var nms = new NodeMediaServer(config); nms.run();