虽然不知道为什么,但笔者尝试了很多次,都只有从 http://nginx-win.ecsds.eu/download/ 下载的 nginx 1.7.11.3 能运行 nginx-rtmp-module 插件
在 nginx 的 etc 目录下新建一个文件 nginx-win-rtmp.conf ,配置文件里的 hls 和 vod 的路径要提前新建好
#user nobody;
# multiple workers works !
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 8192;
# max value 32768, nginx recycling connections+registry optimization =
# this.value * 20 = max concurrent connections currently tested with one worker
# C1000K should be possible depending there is enough ram/cpu power
# multi_accept on;
}
rtmp {
server {
listen 1935;
application live { #//rtmp直播
live on;
}
application hls { #//hls直播
live on;
hls on;
hls_path C:/rtmp/temp/hls/;
hls_fragment 5s;
}
chunk_size 4096; #//数据传输块的大小
#Video on demand
application vod { #//点播
play C:/rtmp/video; #//视频文件存放位置。
}
#Video on demand over HTTP
application vod_http {
#myserver.com及服务器地址,如果只是本地播放,填写127.0.0.1:端口号 就行,端口好看配置文件中http监听的端口下同
play http://127.0.0.1:8080/vod/;
}
}
}
http {
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Methods GET,POST;
location / {
root html;
index index.html;
}
location /hls {
#server hls fragments
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias C:/Baidu_download/temp/hls;
expires -1;
#root G:/Baidu_download/temp/hls;
#add_header Cache-Control no-cache;
}
# 用于查看 rtmp 的状态
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root nginx-rtmp-module/;
}
}
}
nginx.exe -c conf\nginx-win-rtmp.conf
ffmpeg 查看电脑设备,这个命令可以查看到各个设备的名称
ffmpeg -list_devices true -f dshow -i dummy
测试摄像头是否可用
ffplay -f dshow -i video="e2eSoft iVCam"
ffplay -f vfwcap -i 0
查看摄像头和麦克风信息
ffmpeg -list_options true -f dshow -i video="e2eSoft iVCam"
ffmpeg -list_options true -f dshow -i audio="麦克风 (e2eSoft iVCam)"
ffmpeg 的推流
ffmpeg.exe -re -i C:\Users\a\Downloads\movie.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/hls/movie
ffmpeg.exe -re -i C:\Users\a\Downloads\movie.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/movie
循环无限次
ffmpeg.exe -re -stream_loop -1 -i C:\Users\a\Downloads\movie.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/hls/loop
obs 的推流
ffplay 直接播放视频文件
ffplay.exe C:\Users\a\Downloads\movie.mp4
ffplay 播放 rtmp
ffplay -fs rtmp://127.0.0.1:1935/live/test0
ffplay 播放 hsl
ffplay -i "http://127.0.0.1:8080/hls/movie.m3u8"
前端播放 hls 的例子,需要注意的是 m3u8 的文件需要跨域
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>videojs-contrib-hls embed</title>
<link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet">
<script src="https://unpkg.com/video.js/dist/video.js"></script>
<script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
</head>
<body>
<h1>Video.js Example Embed</h1>
<video class="video-js vjs-default-skin" controls preload="auto" width="640" height="268" data-setup='{}'>
<source src="http://127.0.0.1:8080/hls/movie.m3u8" type="application/x-mpegURL">
</video>
</body>
</html>
可以通过这个地址 http://127.0.0.1/stat 来查看 rtmp 的状态
目标是为了让推流端也可以在浏览器上实现。
使用这个库 https://github.com/chenxiaoqino/getusermedia-to-rtmp
大致的原理
大致的使用流程
手机作为电脑摄像头,虽然有水印,但测试用的话就没关系啦 https://www.e2esoft.cn/ivcam/
其它同类应用