文章目錄
安卓直播推流專欄博客總結
0 . 資源和源碼地址 :
- 資源下載地址 : 資源下載地址 , 服務器搭建 , x264 , faac , RTMPDump , 源碼及交叉編譯庫 , 本專欄 Android 直播推流源碼 ;
- GitHub 源碼地址 : han1202012 / RTMP_Pusher
1. 搭建 RTMP 服務器 : 下面的博客中講解了如何在 VMWare 虛擬機中搭建 RTMP 直播推流服務器 ;
2. 準備視頻編碼的 x264 編碼器開源庫 , 和 RTMP 數據包封裝開源庫 :
-
【Android RTMP】RTMPDumb 源碼導入 Android Studio ( 交叉編譯 | 配置 CMakeList.txt 構建腳本 )
-
【Android RTMP】Android Studio 集成 x264 開源庫 ( Ubuntu 交叉編譯 | Android Studio 導入函數庫 )
3. 講解 RTMP 數據包封裝格式 :
4. 圖像數據採集 : 從 Camera 攝像頭中採集 NV21 格式的圖像數據 , 並預覽該數據 ;
-
【Android RTMP】Android Camera 視頻數據採集預覽 ( 視頻採集相關概念 | 攝像頭預覽參數設置 | 攝像頭預覽數據回調接口 )
-
【Android RTMP】Android Camera 視頻數據採集預覽 ( NV21 圖像格式 | I420 圖像格式 | NV21 與 I420 格式對比 | NV21 轉 I420 算法 )
-
【Android RTMP】Android Camera 視頻數據採集預覽 ( 圖像傳感器方向設置 | Camera 使用流程 | 動態權限申請 )
5. NV21 格式的圖像數據編碼成 H.264 格式的視頻數據 :
-
【Android RTMP】x264 編碼器初始化及設置 ( 獲取 x264 編碼參數 | 編碼規格 | 碼率 | 幀率 | B幀個數 | 關鍵幀間隔 | 關鍵幀解碼數據 SPS PPS )
-
【Android RTMP】x264 圖像數據編碼 ( Camera 圖像數據採集 | NV21 圖像數據傳到 Native 處理 | JNI 傳輸字節數組 | 局部引用變量處理 | 線程互斥 )
-
【Android RTMP】x264 圖像數據編碼 ( NV21 格式中的 YUV 數據排列 | Y 灰度數據拷貝 | U 色彩值數據拷貝 | V 飽和度數據拷貝 | 圖像編碼操作 )
6. 將 H.264 格式的視頻數據封裝到 RTMP 數據包中 :
-
【Android RTMP】RTMPDump 封裝 RTMPPacket 數據包 ( 封裝 SPS / PPS 數據包 )
-
【Android RTMP】RTMPDump 封裝 RTMPPacket 數據包 ( 關鍵幀數據格式 | 非關鍵幀數據格式 | x264 編碼後的數據處理 | 封裝 H.264 視頻數據幀 )
-
【Android RTMP】RTMPDump 推流過程 ( 獨立線程推流 | 創建推流器 | 初始化操作 | 設置推流地址 | 啓用寫出 | 連接 RTMP 服務器 | 發送 RTMP 數據包 )
7. 階段總結 : 阿里雲服務器中搭建 RTMP 服務器 , 並使用電腦軟件推流和觀看直播內容 ;
-
【Android RTMP】RTMP 直播推流 ( 阿里雲服務器購買 | 遠程服務器控制 | 搭建 RTMP 服務器 | 服務器配置 | 推流軟件配置 | 直播軟件配置 | 推流直播效果展示 )
-
【Android RTMP】RTMP 直播推流階段總結 ( 服務器端搭建 | Android 手機端編碼推流 | 電腦端觀看直播 | 服務器狀態查看 )
8. 處理 Camera 圖像傳感器導致的 NV21 格式圖像旋轉問題 :
-
【Android RTMP】NV21 圖像旋轉處理 ( 問題描述 | 圖像順時針旋轉 90 度方案 | YUV 圖像旋轉細節 | 手機屏幕旋轉方向 )
-
【Android RTMP】NV21 圖像旋轉處理 ( 圖像旋轉算法 | 後置攝像頭順時針旋轉 90 度 | 前置攝像頭順時針旋轉 90 度 )
9. 下面這篇博客比較重要 , 裏面有一個快速搭建 RTMP 服務器的腳本 , 強烈建議使用 ;
10. 編碼 AAC 音頻數據的開源庫 FAAC 交叉編譯與 Android Studio 環境搭建 :
-
【Android RTMP】音頻數據採集編碼 ( 音頻數據採集編碼 | AAC 高級音頻編碼 | FAAC 編碼器 | Ubuntu 交叉編譯 FAAC 編碼器 )
-
【Android RTMP】音頻數據採集編碼 ( FAAC 頭文件與靜態庫拷貝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音頻採樣 PCM 格式 )
11. 解析 AAC 音頻格式 :
12 . 將麥克風採集的 PCM 音頻採樣編碼成 AAC 格式音頻 , 並封裝到 RTMP 包中 , 推流到客戶端 :
-
【Android RTMP】音頻數據採集編碼 ( FAAC 音頻編碼參數設置 | FAAC 編碼器創建 | 獲取編碼器參數 | 設置 AAC 編碼規格 | 設置編碼器輸入輸出參數 )
-
【Android RTMP】音頻數據採集編碼 ( FAAC 編碼器編碼 AAC 音頻解碼信息 | 封裝 RTMP 音頻數據頭 | 設置 AAC 音頻數據類型 | 封裝 RTMP 數據包 )
-
【Android RTMP】音頻數據採集編碼 ( FAAC 編碼器編碼 AAC 音頻採樣數據 | 封裝 RTMP 音頻數據頭 | 設置 AAC 音頻數據類型 | 封裝 RTMP 數據包 )
上一篇博客 【Android RTMP】RTMP 直播推流服務器搭建 ( Ubuntu 18.04.4 虛擬機 ) 具體演示了在虛擬機上搭建直播推流服務器 , 並且進行錯誤排查的過程 , 測試一下搭建流程是否能跑通 ;
本博客演示如何 在阿里雲購買服務器 , 遠程服務器控制 , 搭建 RTMP 直播推流服務器 , 並配置服務器 , 直播展示 , 全過程的記錄 ;
一、 阿里雲服務器購買
1 . 進入阿里雲控制檯的雲服務器 ECS 界面 :
2 . 選擇服務器類型 : 選個搶佔式的實例 , 挑個便宜點的網絡增強型的服務器 ;
3 . 帶寬設置 : 設置按流量收費 , 100M 帶寬 ;
4 . 設置今晚 11 點釋放 :
5 . 實例查看 :
6 . 配置安全組 : 入方向配置 TCP 協議 8080 和 1935 端口 ;
二、 遠程服務器控制軟件
1 . 使用 WinSCP 工具連接服務器 , 並與服務器進行文件交互操作 ;
2 . 連接後界面 :
3 . 將上述兩個源碼上傳到遠程服務器的 /root/rtmp 目錄下 :
三、 配置 Ubuntu 服務器
1 . 更新 apt 源
編譯 Nginx 需要安裝一些依賴庫 , 必須更新 apt 源 , 才能安裝 ;
1 . 備份源 :
mv /etc/apt/sources.list /etc/apt/sourses.list.backup
2 . 添加源 : 本地編輯 sources.list , 內容如下 , 上傳到服務器 /root/rtmp/ 目錄下 ;
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
將 sources.list 上傳到 rtmp 目錄下 , 並複製到 /etc/apt/ 目錄下 ;
root@hsl:~/rtmp# cp sources.list /etc/apt/
3 . 更新源 :
sudo apt-get update
2 . 安裝 pcre、OpenSSL、zlib 庫
1 . 安裝編譯 Nginx 所需的 pcre , OpenSSL , zlib 庫 ;
$ sudo apt-get install libpcre3 libpcre3-dev
$ sudo apt-get install openssl libssl-dev
$ sudo apt-get install zlib1g-dev
3 . 解壓 nginx-1.15.3.tar.gz、nginx-rtmp-module-1.2.1.tar.gz 源碼
$ tar xvf nginx-1.15.3.tar.gz
$ tar xvf nginx-rtmp-module-1.2.1.tar.gz
4 . 執行 configure 生成 Makefile 文件
$ ./configure --prefix=./bin --add-module=../nginx-rtmp-module-1.2.1
5 . 編譯安裝
$ make install
6 . 配置 Nginx 服務器
配置 conf/nginx.conf 腳本 : 在本地配置 nginx.conf 腳本 , 然後上傳到服務器 /root/rtmp/ 目錄中 ;
user root;
worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
application myapp {
live on;
}
}
}
http {
server {
listen 8080;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /root/rtmp/nginx-rtmp-module-1.2.1/;
}
location /control {
rtmp_control all;
}
location /rtmp-publisher {
root /root/rtmp/nginx-rtmp-module-1.2.1/test;
}
location / {
root /root/rtmp/nginx-rtmp-module-1.2.1/test/www;
}
}
}
備份原來的腳本 : 在 /root/rtmp 目錄下執行該命令 ;
$ mv nginx-1.15.3/bin/conf/nginx.conf nginx-1.15.3/bin/conf/nginx.conf.backup
複製上傳到腳本到 nginx-1.15.3/bin/conf/ 目錄下 : 在 /root/rtmp 目錄下執行該命令 ;
$ cp nginx.conf nginx-1.15.3/bin/conf/
7 . 配置 Nginx 服務器文件權限
啓動時出現 403 錯誤 , 懷疑是文件權限不足 , 這裏將 nginx-1.15.3 和 nginx-rtmp-module-1.2.1 賦予所有的權限 ;
root@octopus:~/rtmp# chmod -R 777 nginx-1.15.3
root@octopus:~/rtmp# chmod -R 777 nginx-rtmp-module-1.2.1
8 . 查看 Nginx RTMP 服務器狀態
1 . 查看狀態 : http://47.94.36.51:8080/stat
2 . 查看直播內容 : http://47.94.36.51:8080
四、 推流軟件下載與配置
1 . 推流軟件 : 使用 EV 錄屏軟件 作爲推流軟件 , 點擊鏈接進入下載界面 ;
2 . 配置推流地址 : rtmp://47.94.36.51/myapp/ , 密碼 0 ;
選擇 在線直播 , 點擊右上角的設置按鈕 ;
彈出設置對話框 , 設置直播地址 rtmp://47.94.36.51/myapp/ , 密碼設置爲 0 ;
3 . 開始推流 : 點擊左下角播放按鈕 , 即可開始推流 ;
4 . 查看服務器端 RTMP 推流狀態 : 111.192.247.192 地址正在向服務器推流 , 這個地址就是當前我的電腦地址 ;
五、 直播軟件下載與配置
1 . 直播軟件 : 使用 EVPlayer 觀看直播 , 點擊該鏈接下載軟件 ;
2 . 直播配置 : 郵件點擊界面 , 選擇播放網絡流 , 輸入 直播地址 rtmp://47.94.36.51/myapp/ , 密碼 0 ;
3 . 直播效果展示 : 居然不讓截屏 , 貼張照片 ;
4 . 服務器狀態查看 : 可以看到一個設備正在推流 , 一個設備正在觀看直播 ;