簡單幾步實現RTMP直播

一、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瀏覽器可以直接點擊超鏈接出現加載提示,其他瀏覽器需要手工設置。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章