海康RTSP轉flv並實現h5頁面播放

XinShun發表於2020-11-03

1、參考 https://blog.csdn.net/u013769085/article/details/108800323

     https://blog.csdn.net/weixin_42396332/article/details/105430015

     https://www.jianshu.com/p/d9c66d7d1653

2、ffmpeg轉碼

ffmpeg.exe -rtsp_transport tcp -buffer_size 4096000 -i "rtsp://admin:123456@192.168.1.2:554/Streaming/Channels/201" -vcodec copy -acodec copy -f flv rtmp://192.168.1.100:1935/myapp/0003

3、使用flv.js插入時,結果報錯:Unsupported codec in video frame: 2

意思是不輸出音訊(專案中用的攝像頭沒有音訊,所以此處用 -an,不輸出音訊)

ffmpeg.exe -rtsp_transport tcp -buffer_size 4096000 -i "rtsp://admin:123456@192.168.1.2:554/Streaming/Channels/201" -vcodec copy -an -f flv rtmp://192.168.1.100:1935/myapp/0003

4、播放

<!DOCTYPE html>
<html>
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>flv.js demo</title>
    <style>
        .mainContainer {
            display: block;
            width: 1024px;
            margin-left: auto;
            margin-right: auto;
        }

        .urlInput {
            display: block;
            width: 100%;
            margin-left: auto;
            margin-right: auto;
            margin-top: 8px;
            margin-bottom: 8px;
        }

        .centeredVideo {
            display: block;
            width: 100%;
            height: 576px;
            margin-left: auto;
            margin-right: auto;
            margin-bottom: auto;
        }

        .controls {
            display: block;
            width: 100%;
            text-align: left;
            margin-left: auto;
            margin-right: auto;
        }
    </style>
</head>
<body>
    <div class="mainContainer">
		<video id="videoElement" class="centeredVideo" controls autoplay width="1024" height="576" muted>Your browser is too old which doesn't support HTML5 video.</video>
    </div>
    <br>
    <div class="controls">
        <!--<button onclick="flv_load()">載入</button>-->
        <button onclick="flv_start()">開始</button>
        <button onclick="flv_pause()">暫停</button>
        <button onclick="flv_destroy()">停止</button>
        <input style="width:100px" type="text" name="seekpoint" />
        <button onclick="flv_seekto()">跳轉</button>
    </div>
    <script src="https://cdn.bootcdn.net/ajax/libs/flv.js/1.5.0/flv.min.js"></script>
    <script>
        var player = document.getElementById('videoElement');
        if (flvjs.isSupported()) {
            var flvPlayer = flvjs.createPlayer({
				type: 'flv',
				url: 'http://192.168.1.100:8005/live?port=1935&app=myapp&stream=0003',
                "isLive": true,//<====加個這個 
				hasAudio: false,
				hasVideo: true,
				//withCredentials: false,
				//cors: true
            }, {
				enableWorker: true,	// 開啟多執行緒
				enableStashBuffer: false,
				lazyLoad: false,
				lazyLoadMaxDuration: 0,
				lazyLoadRecoverDuration: 0,
				deferLoadAfterSourceOpen: false,
				fixAudioTimestampGap: true,
				autoCleanupSourceBuffer: true,
			});
            flvPlayer.attachMediaElement(videoElement);
            flvPlayer.load(); //載入
            flv_start();
        }

        function flv_start() {
            player.play();
        }

        function flv_pause() {
            player.pause();
        }

        function flv_destroy() {
            player.pause();
            player.unload();
            player.detachMediaElement();
            player.destroy();
            player = null;
        }

        function flv_seekto() {
            player.currentTime = parseFloat(document.getElementsByName('seekpoint')[0].value);
        }
    </script>
</body>
</html>

5、效果

相關文章