ubuntu下使用nginx搭建流媒體伺服器,實現視頻點播

来源:http://www.cnblogs.com/wanderwei/archive/2017/09/07/7490692.html
-Advertisement-
Play Games

原文:http://blog.csdn.net/code_better/article/details/54898098 ...


首先我們看如何實現視頻點播,視頻點播支持flv文件及H264編碼視頻,ACC編碼音頻的mp4文件: 
第一步,創建單獨的目錄(因為軟體較多,容易混亂),下載需要的軟體: 
我們需要下載nginx,pcre,zlib,openssl以及nginx-rtmp-module

 1 mkdir work
 2 
 3 cd work
 4 
 5 wget http://nginx.org/download/nginx-1.10.3.tar.gz
 6 
 7 wget http://zlib.net/zlib-1.2.11.tar.gz
 8 
 9 wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
10 
11 wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
12 
13 wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

 

第二步,分別解壓這四個文件:

tar -zxvf 文件名

 

第三步,編譯安裝nginx:

./configure --prefix=/usr/local/nginx --with-debug --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2k --add-module=../nginx-rtmp-module-master

make

sudo make install

 

第四步,進入 /usr/local/nginx/conf,配置nginx.conf文件,在文件末尾添加如下內容:

rtmp {
    server {
        listen 1935;

        application vod {
            play /var/flvs; #指定存放視頻文件的路徑
        }

        application vod_http {
            #myserver.com及伺服器地址,如果只是本地播放,填寫127.0.0.1:埠號 就行,埠好看配置文件中http監聽的埠下同
            play http://myserver.com/vod; 
        }

        application vod_mirror {
            play /var/local_mirror http://myserver.com/vod;
        }
    }
}

示例完整版:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;

    application vod {
            play /video_test;
    }

    application vod_http {
            play http://192.168.1.102:8080/vod;
    }

    application vod_mirror {
            # try local location first, then access remote location
        play /var/local_mirror http://192.168.1.102:8080/vod;
    }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

然後,進入與conf文件夾同級的sbin目錄下,運行:

sudo ./nginx

至此,伺服器搭建完成,可以實現視頻點播了。 

視頻點播測試: 
播放位於 /video_test 下的file.flv視頻文件:

ffplay rtmp://localhost/vod//file.flv

可以使用VLC這個播放器或者ffplay(需要安裝ffmpeg),VLC自行百度安裝即可。 

ffmpeg安裝:

sudo apt-add-repository ppa:jon-severinsson/ffmpeg
sudo apt-get update
sudo apt-get install ffmpeg

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL有一種日誌,叫做慢查詢日誌,主要就是用來記錄一些耗時的查詢操 作。通過這個日誌我們就可以分析出哪些的操作是影響性能的,我們需要對其 進行一些優化措施。 ...
  • 題目:從 scott 用戶的 emp/dept 表中,查詢所有員工工資都大於1000的部門的信息及員工信息 肢解: 1、從scott用戶的emp/dept表中,查詢所有員工工資都大於1000的部門信息 2、從scott用戶的emp/dept表中,查詢所有員工工資都大於1000的員工信息 3、條件都是 ...
  • 今天在使用taskctl的designer時,十多分鐘掛了2次,每次掛了之後就簽不出來了,只能等半小時,然後在taskctl的QQ群里咨詢了,給的解決方案是 http://www.taskctl.com/forum/detail_58.html ,我按照步驟操作時發現ctladmin登錄不了,在群里 ...
  • 一、約束之主鍵約束 約束:約束是添加在列上的,用來約束列的。 1、主鍵約束(唯一標識):非空、唯一、被引用 當表的某一列被指定為主鍵後,該類就不能為空,不能有重覆值出現 創建表時指定主鍵的兩種方式: 指定sid列為主鍵列,即為sid列添加主鍵約束 修改表時指定主鍵: ALTER TABLE stu ...
  • 一、表格 表一 emp 表二 dept 表三 salgrade; 表四 年度利潤表 二、習題 1. 查出至少有一個員工的部門。顯示部門編號、部門名稱、部門位置、部門人數。 2. 列出所有員工的姓名及其直接上級的姓名。 3. 列出受雇日期早於直接上級的所有員工的編號、姓名、部門名稱。 4. 列出部門名 ...
  • 什麼是Database,什麼是Schema,什麼是Table,什麼是列,什麼是行,什麼是User? 我們可以把Database看作是一個大倉庫,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間。 Table可以看作是每個Schema中的床,Table(床)就被放入每個 ...
  • 一、emp表 二、練習 1. 查詢出部門編號為30的所有員工2. 所有銷售員的姓名、編號和部門編號。3. 找出獎金高於工資的員工。4. 找出獎金高於工資60%的員工。5. 找出部門編號為10中所有經理,和部門編號為20中所有銷售員的詳細資料。 6. 找出部門編號為10中所有經理,部門編號為20中所有 ...
  • man 查看命令幫助,命令的詞典,更複雜的還有info,但不常用。 help 查看Linux內置命令的幫助,比如cd命令。 文件和目錄操作命令(18個) ls 全拼list,功能是列出目錄的內容及其內容屬性信息。 cd 全拼change directory,功能是從當前工作目錄切換到指定的工作目錄。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...