一、RTMP
RTMP協議是Real Time Message Protocol(實時信息傳輸協議)的縮寫,它是由Adobe公司提出的一種應用層的協議,用來解決多媒體數據傳輸流的多路複用(Multiplexing)和分包(packetizing)的問題。隨着VR技術的發展,視頻直播等領域逐漸活躍起來,RTMP作爲業內廣泛使用的協議也重新被相關開發者重視起來。
本文並沒有對於RTMP的具體協議進行分析,而是通過python實現了一個B/S的rtmp推流過程,包括以下幾方面結構:
- 通過python產生視頻/圖片流,使用管道退給FFmpeg
- 使用Nginx搭建rtmp推流服務器
- web端使用videojs解析並展示rtmp視頻流
二、FFmpeg
FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化爲流的開源計算機程序。本文以windows平臺爲例,介紹FFmpeg的配置方式。
在FFmpeg官網下載對應平臺的安裝包http://www.ffmpeg.org/download.html
解壓之後,將解壓目錄添加至環境變量的Path中
打開cmd,輸入ffmpeg,如果打印出以下內容,說明ffmpeg配置成功
三、RTMP Server
RTMP Server由Nginx和python兩部分組成,在Windows下,需要對nginx-rtmp-module進行編譯,也可以直接下載已經編譯好的版本,比如筆者使用了github中的一個,下載之後雙擊liveserver.bat即可
創建一個python文件,服務器代碼如下
#!/usr/bin/python2.6
# -*- coding: utf-8 -*-
import subprocess as sp
rtmpUrl = 'rtmp://127.0.0.1/live/demo'
# 視頻屬性
size = [800,600]
sizeStr = str(size[0]) + 'x' + str(size[1])
fps = 30 # 30p/self
fps = int(fps)
hz = int(1000.0 / fps)
command = ['ffmpeg',
'-y',
'-f', 'rawvideo',
'-vcodec','rawvideo',
'-pix_fmt', 'bgr24',
'-s', sizeStr,
'-r', str(fps),
'-i', '-',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-f', 'flv',
rtmpUrl]
pipe = sp.Popen(command, stdin=sp.PIPE) #,shell=False
while True:
#TODO 獲取圖片或視頻流
#frame = img
pipe.stdin.write(frame.tostring()) # 存入管道
將代碼中TODO下面的fram改爲自己獲取的圖片或視頻流即可,運行python,服務器啓動成功。
四、RTMP Client
RTMP客戶端使用videojs實現了在瀏覽器中的展示,demo如下
<html>
<head>
<title>視頻直播</title>
<meta charset="utf-8">
<link href="http://vjs.zencdn.net/5.5.3/video-js.css" rel="stylesheet">
<!-- If you'd like to support IE8 -->
<script src="http://vjs.zencdn.net/ie8/1.1.1/videojs-ie8.min.js"></script>
</head>
<body>
<a href='http://www.adobe.com/go/getflashplayer' target='_blank'>
你的瀏覽器沒有安裝或開啓Flash
</a>
<video id="my-video" class="video-js vjs-big-play-centered" controls preload="auto" width="500"
poster="http://ppt.downhot.com/d/file/p/2014/08/12/9d92575b4962a981bd9af247ef142449.jpg" data-setup="{}" autoplay="autoplay">
<source src="rtmp://127.0.0.1/live/demo" type="rtmp/flv">
<!-- 如果上面的rtmp流無法播放,就播放hls流 -->
<!-- <source src="http://10.10.5.119/live/livestream.m3u8" type='application/x-mpegURL'> -->
<p class="vjs-no-js">播放視頻需要啓用 JavaScript,推薦使用支持HTML5的瀏覽器訪問。
To view this video please enable JavaScript, and consider upgrading to a web browser that
<a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
</p>
</video>
<script src="http://vjs.zencdn.net/5.5.3/video.js"></script>
</body>
</html>
注意:
- 不能直接雙擊html文件訪問,需要將其部署在服務器中,如tomcat。
- 如果出現No compatible source was found for this video,有可能是因爲瀏覽器禁止了flash,Chrome瀏覽器可以直接點擊超鏈接出現加載提示,其他瀏覽器需要手工設置。