æµè§å¨ææ¾RTSPæå头è§é¢
ä¸ã项ç®éæ±ï¼éè¦å¨chromeæµè§å¨ä¸ææ¾rtspåè®®çæå头è§é¢æµ
äºãæè·¯ï¼
1ãchromeå·²ç»ä¸æ¯ææä»¶äºï¼æä»¥æé¤ä¸åæä»¶çæè·¯ï¼
2ãæµè§å¨ç®ååç卿¯ærtmpåè®®ï¼hlsåè®®æµè§é¢é¶æ®µï¼è¿æ²¡å¼å§æ¯ærtspåè®®ï¼æä»¥å¯ä»¥èèå°rtsp转ærtmpåhlsãå¨é¢å¯¼çæå¯¼ä¸ï¼éæ©çæ¯rtmpï¼è³äºhlsæå
´è¶£çåå¦å¯ä»¥èªå·±å»ç ç©¶ï¼æ´ä½æè·¯ä¸è½¬rtmpæ¯ä¸ç´çã
3ãæäºå¤§ä½æ¹åå°±å¼å§çææ¾èµæäºï¼ç½ä¸æå¾å¤ä½¿ç¨FFmpeg+nginxæ¥å°rtsp转rtmpçï¼å½ç¶ä¹æå¯ä»¥è±é±å»ä¹°è½¬ç å¨çï¼é£å°±æ´å æ¹ä¾¿äºãï¼è½¬ç å¨ä¹ä¸æ¯å¾è´µï¼é¡¹ç®èµéå
è¶³çï¼èä¸ä¸æ³è±æ¶é´ç ç©¶çï¼å¯ä»¥èèè¿ä¸ªä¼æ´å¥½ï¼ï¼
ä¸ãå®ç°ï¼
3.1ãrtspå
¬ç½æµè¯ä¾åï¼rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov
3.2ãFFmpegï¼
3.2.1 èµæºä¸è½½ï¼éè¿å®ç½http://www.ffmpeg.org/download.htmlæå
¶ä»éå¾ä¸è½½ffmpegï¼https://ffmpeg.zeranoe.com/buildsï¼ï¼è§£åå°éæç®å½ä¸ï¼è§£åä¹åå¦ä¸å¾ï¼
3.2.2é
ç½®ç¯å¢åéï¼å½ä»¤çªå£è¾å
¥âffmpeg -versionâåºç°å¦ä¸å¾å说æç¯å¢é
ç½®æ£ç¡®
3.3ãnginx:
3.3.1ãå®è£
é
ç½®nginxï¼é
置已ç»é
置好äºï¼ç´æ¥ä¸è½½å³å¯ä½¿ç¨ãnginxå
åé
ç½®æä»¶
3.3.2ãä¿®æ¹confæä»¶å¤¹ä¸nginx.confæä»¶ï¼æä»¶å
容å¦ä¸ï¼
worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
chunk_size 4000;
application live {
live on;
}
application hls {
live on;
hls on;
hls_path temp/hls;
hls_fragment 8s;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 20000;
location / {
root html;
index index.html index.htm;
}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root html;
}
location /hls {
#server hls fragments
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias temp/hls;
expires -1;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3.3.3ãä¿®æ¹å®æåå¯å¨nginxï¼
æå¤ç§æ¹å¼å¯å¨nginxï¼ï¼1ï¼ãç´æ¥åå»nginx.exeï¼åå»åä¸ä¸ªé»è²çå¼¹æ¡ä¸éªèè¿ï¼ï¼2ï¼ãæå¼cmdå½ä»¤çªå£ï¼åæ¢å°nginxè§£åç®å½ä¸ï¼è¾å
¥å½ä»¤nginx.exeæè
start nginxï¼å车å³å¯
æ£æ¥nginxæ¯å¦å¯å¨æåï¼
ç´æ¥å¨æµè§å¨ä¸è¾å
¥ç½åhttp:localhost:post,post为nginx.confä¸è®¾ç½®çï¼æ¤å¤æè®¾ç½®çæ¯20000ï¼å车åºç°å¦ä¸
说æå¯å¨æåäºã
3.3.4ãå
³énginxï¼
å¦æä½¿ç¨cmdå½ä»¤çªå£å¯å¨nginxï¼å
³écmdçªå£æ¯ä¸è½ç»ænginxè¿ç¨çï¼å¯ä½¿ç¨ä¸¤ç§æ¹æ³å
³énginx
ï¼1ï¼ãè¾å
¥nginxå½ä»¤ nginx -s stopï¼å¿«é忢nginxï¼æè
nginx -s quitï¼å®æ´æåºç忢nginxï¼
ï¼2ï¼ä½¿ç¨taskkill taskkilll /f /t /im nginx.exe
**3.3.5ã**nginxè¿å¯ä»¥åè´è½½åè¡¡ï¼æ¤å¤æ²¡æç ç©¶ï¼æéæ±çåå¦å¯èªè¡ç ç©¶ã
3.3.6ãå¼å§è½¬ç ï¼
å¨cmdçªå£æ§è¡å¦ä¸å½ä»¤
ffmpeg -re -rtsp_transport tcp -i "rtspå°å" -f flv -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 "rtmp://æ¬æºå°å:1935(nginx.confçrtmp模åä¸listen)/live(rtmp模åä¸application设置)/test(é便ååå)"
å¯å¨ä¹åå¦ä¸å¾ï¼
注æï¼
1ãffmpeg转ç ä¸nginx代çå¯ä»¥ä¸å¨åä¸å°æå¡å¨ä¸è¿è¡ï¼ä½è¿ç§æ
åµå¯¹å¸¦å®½è¦æ±è¾é«
2ã妿rtspè§é¢æµæå¼ï¼å¯è½å¯¼è´è½¬ç ç¨åºä¸ç´çå¾
ï¼å æ¤å å
¥-stimeoutåæ°ï¼è¡¨ç¤ºè¶
æ¶æ¶é´ï¼ï¼å¦æè¶
æ¶æªè·åå°è§é¢æµï¼åæ¥ééåºï¼å¦ééæ°è·åï¼å¯ä»¥å个batèæ¬ï¼å¾ªç¯æ§è¡ffmpegå½ä»¤ï¼
3.4ãchrome䏿æ¾rtmp宿¶æµï¼
H5çvideoæ ç¾æ¯ä¸æ¯ærtmpçï¼ä½æ¯æä»¬ævideo.jså¯ä»¥è§£å³è¿ä¸é®é¢ãç¶èå¨ä½¿ç¨video.jsçæ¶åéå°äºé®é¢ï¼åå¼å§æä¹é½æä¸åºæ¥ï¼åæ¥ç»è¿ä¸çªæ¥æ¾åç°ï¼å¨video.js 6以ä¸ççæ¬æ¯å·²ç»æ²¡æ³ææ¾äºãåå æ¯video.jsææ¾rtmpçåçè¿æ¯éè¿flashãå¯è½æ¯video为äºç´§è·æ¥ä¼ï¼å»æäºflashã
代ç å
请ç¹å»è¿éä¸è½½
å°ä»£ç ä¿®æ¹å¦ä¸ï¼
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>æµè¯rtmpç´ææº</title>
<script src="js/video.js"></script>
<link href="css/video-js.css" rel="stylesheet">
<!-- If you'd like to support IE8 -->
<script src="js/videojs-ie8.min.js"></script>
</head>
<body>
<div class="openFlashTips" style="width:300px;position:absolute;top:20px;left:225px;z-Index:9999;color:white">è§é¢æ æ³æ£å¸¸ææ¾ï¼è¯·ç¹å»ä¸æ¹å¯ç¨flash</div>
<video id="my-video" style="color:black;width:750px;height:350px" class="video-js" autoplay controls preload="auto" width="750" height="350" data-setup="{}">
<source src='rtmp://172.16.15.240:1935/live/test11' type='rtmp/flv'/>
</video>
<embed width="300" height="70" class="openFlash" style="position:absolute;top:130px;left:225px;z-Index:9999;" type="application/x-shockwave-flash">
<script type="text/javascript" language="JavaScript">
function flashChecker() {
var hasFlash = 0; //æ¯å¦å®è£
äºflash
var flashVersion = 0; //flashçæ¬
var isIE = /*@[email protected]*/0; //æ¯å¦IEæµè§å¨
if (isIE) {
var swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
if (swf) {
hasFlash = 1;
VSwf = swf.GetVariable("$version");
flashVersion = parseInt(VSwf.split(" ")[1].split(",")[0]);
}
} else {
if (navigator.plugins && navigator.plugins.length > 0) {
var swf = navigator.plugins["Shockwave Flash"];
if (swf) {
hasFlash = 1;
var words = swf.description.split(" ");
for (var i = 0; i < words.length; ++i) {
if (isNaN(parseInt(words[i]))) continue;
flashVersion = parseInt(words[i]);
}
}
}
}
return {f: hasFlash, v: flashVersion};
}
var fls = flashChecker();
var s = "";
if (fls.f) {
document.getElementsByClassName("openFlash")[0].style.display = "none";
document.getElementsByClassName("openFlashTips")[0].style.display = "none";
// document.write("æ¨å®è£
äºflash,å½åflashçæ¬ä¸º: " + fls.v + ".x");
}
else {
document.getElementsByClassName("openFlash")[0].style.display = "block";
document.getElementsByClassName("openFlashTips")[0].style.display = "block";
// document.write("æ¨æ²¡æå®è£
flash");
}
</script>
</body>
</html>
å¯å¨tomcatï¼å¨æµè§å¨ä¸è¾å
¥ç½åå³å¯æ¥ç宿¶è§é¢ï¼å¦ä¸å¾çæµè¯è§é¢ï¼ã
æ£å¼ç¯å¢æµè¯ææï¼è½¬ç ä¹åå·®ä¸å¤å»¶è¿å¨3-5ç§å·¦å³ã
欢è¿å¤§å®¶ä¸èµ·äº¤æµï¼å¦ææç« 䏿é误çå°æ¹ï¼ä¹å¸æææ£ã