1. 程式人生 > >RTSP視訊流的遠端播放的實現

RTSP視訊流的遠端播放的實現

無心學習,把最近這段時間的所想所思寄託在這片土地上,算是對自己的一個交代,也是對各位大大們的一種感激。

原料:

(1)海康威視攝像頭一個

(2)PC機一臺

(3)阿里ip一個

實現的原理:

(1)ffmpeg的轉碼

(2)傳送到ffserver伺服器等待監聽,

(3)轉發到阿里雲ip,

(4)手機,瀏覽器 就可以通過輸入ip地址檢視。

解決步驟1:

rtsp視訊流

這裡的視訊流我當時是從海康那裡得到的

rtsp://admin:[email protected]:554/h264/ch1/main/av_stream
解釋下:rtsp:視訊流格式,admin:SELJQJ00 :設定使用者名稱和密碼 192.168.31.247:554 設定的是視訊流ip和埠號 h264表示編碼

解決步驟2:

ffmpeg的配置與安裝

考慮到我們的最終目標是實現無外掛的視訊的播放,我視訊流的封裝格式採用了支援html5的webm格式。

webm格式的視訊流的編碼方式為vpx,而海康威視攝像頭是rtsp視訊流,採用的是H264格式編碼,因此要進行對視訊流的轉碼。

因此安裝ffmpeg時候,需要libx264和libvpx的安裝包。

編譯安裝流程

建立檔案包存放目錄

mkdir ~/ffmpeg_sources

安裝yasm

sudo apt-get install yasm
編譯安裝libx264包
cd ~/ffmpeg_sources
wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
tar xjvf last_x264.tar.bz2
cd x264-snapshot*
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --disable-opencl
PATH="$HOME/bin:$PATH" make
make install
make distclean

編譯安裝libfdk-aac(音訊可裝也可以不安裝)

cd ~/ffmpeg_sources
wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean
編譯安裝libvpx
cd ~/ffmpeg_sources
wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.0.tar.bz2
tar xjvf libvpx-1.6.0.tar.bz2
cd libvpx-1.6.0
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests
PATH="$HOME/bin:$PATH" make
make install
make clean
編譯安裝ffmpeg
cd ~/ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libtheora \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree
PATH="$HOME/bin:$PATH" make
make install
make distclean
hash -r

這樣基本上就安裝好啦 你會發現在你的使用者目錄的bin資料夾下發現四個可執行檔案
[email protected]:~$ cd bin/
[email protected]:~/bin$ ls
feed1.ffm  ffmpeg  ffprobe  ffserver  x264
[email protected]:~/bin$ 

解決步驟3:

ffserver.conf配置檔案的書寫(一般放在etc下面)

sudo vi /etc/ffserer.conf

HTTPPort 9999
RTSPPort 9990


HTTPBindAddress 0.0.0.0


MaxClients 1000
MaxBandwidth 100000
CustomLog -




<Feed feed1.ffm>
File ./feed1.ffm
FileMaxSize 400M
ACL allow localhost
</Feed>
    
<Stream test.webm>
Feed feed1.ffm 
Format webm
    
VideoCodec libvpx 
VideoFrameRate 10
VideoBitRate 300
VideoSize 480x320
NoAudio
PreRoll
StartSendOnKey
#AVPresetVideo default
#AVPresetVideo baseline
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 10
AVOptionVideo qmax 42
AVOptionVideo quality good
#AudioCodec libfaac
#AudioBitRate 32
#AudioChannels 2
#AudioSampleRate 22050
AVOptionAudio flags +global_header
</Stream>


<Stream teststat.html>
Format status
</Stream>

解決步驟4:

啟動伺服器

cd bin
./ffserever -f /etc/ffserver.conf
啟動ffmpeg
cd bin
./ffmpeg -f rtsp -rtsp_transport tcp -i rtsp://admin:[email protected]:554/h264/ch1/main/av_stream http://localhost:9999/feed1.ffm

在本地瀏覽器上輸入http://192.168.37.247:9999/test.webm 就可以查看了,不需要外掛的其中這裡的ip我用的是虛擬機器的ip。
解決步驟5:

如果想通過外網訪問,我採用的是frp內網穿透的方式

將frps和frps.ini放在阿里伺服器上

frps.ini配置檔案

[common]
# A literal address or host name for IPv6 must be enclosed
# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
bind_addr = 0.0.0.0
bind_port = 7000
# if you want to support virtual host, you must set the http port for listening (optional)
vhost_http_port = 80
#vhost_https_port = 443
# if you want to configure or reload frps by dashboard, dashboard_port must be set
#dashboard_port = 7500
# dashboard assets directory(only for debug mode)
# assets_dir = ./static
# console or real logFile path like ./frps.log
log_file = ./frps.log
# debug, info, warn, error
log_level = info
log_max_days = 3
# if you enable privilege mode, frpc can create a proxy without pre-configure in frps when privilege_token is correct
#privilege_mode = true
#privilege_token = 12345678
# only allow frpc to bind ports you list, if you set nothing, there won't be any limit
#privilege_allow_ports = 2000-3000,3001,3003,4000-50000
# pool_count in each proxy will change to max_pool_count if they exceed the maximum value
max_pool_count = 500
[Video]
type = tcp
auth_token = 123
bind_addr = 0.0.0.0
listen_port = 9999


frpc和frpc.ini放在本機上

frpc.ini配置檔案

# [common] is integral section
[common]
# A literal address or host name for IPv6 must be enclosed
# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
server_addr = ip
server_port = 7000
# console or real logFile path like ./frpc.log
log_file = ./frpc.log
# debug, info, warn, error
log_level = info
log_max_days = 3
# for authentication
auth_token = 123
# for privilege mode
privilege_token = 12345678

# ssh is the proxy name same as server's configuration
[ssh]
# tcp | http, default is tcp
type = tcp
local_ip = 127.0.0.1
local_port = 22
# true or false, if true, messages between frps and frpc will be encrypted, default is false
use_encryption = true
# default is false
use_gzip = false
# connections will be established in advance, default value is zero
pool_count = 10

[Video]
type = tcp
local_ip = 127.0.0.1
local_port = 9999
啟動frpc
cd bin
./frpc -c ./frpc.ini

瀏覽器上輸入http:// ip:9999/test.webm 就可以查看了 當然也可以寫上簡單的頁面來檢視

<html lang="en">
    <head>
       <meta charset=utf-8/>
    </head>
    <body>
        <div id='player'>
     		
			<video src="http://ip:9999/test.webm" width="352" height="264" controls autobuffer></video>
        </div>
    </body>
</html>




相關推薦

RTSP視訊流遠端播放實現

無心學習,把最近這段時間的所想所思寄託在這片土地上,算是對自己的一個交代,也是對各位大大們的一種感激。 原料: (1)海康威視攝像頭一個 (2)PC機一臺 (3)阿里ip一個 實現的原理: (1)ffmpeg的轉碼 (2)傳送到ffserver伺服器等待監聽, (3)轉發

網頁播放rtsp視訊流

RTSP協議 (1)是流媒體協議。 (2)RTSP協議是共有協議,並有專門機構做維護。 (3)RTSP協議一般傳輸的是 ts、mp4 格式的流。 (4)RTSP傳輸一般需要 2-3 個通道,命令

Android使用VideoView播放live555服務端的RTSP視訊流demo

簡介 本文為一個簡單demo,測試live555作為RTSP的服務端,使用android自帶的VideoView播放RTSP視訊流。 客戶端 核心程式碼 private void playRtspStream(String rtspUr

ffmpeg推送,EasyDarwin轉發,vlc播放 實現整個RTSP直播

部署EasyDarwin流媒體伺服器 ffmpeg推送攝像機視訊到EasyDarwin VLC播放 第一步:部署EasyDarwin流媒體伺服器 例如,我們現在將EasyDarwin流媒體伺服器部署在127.0.0.1,埠:554 第二

linux環境下用GStreamer實現rtsp取流播放

最近研究Gstream的一些東西分享給大家,通過rtsp進行取流,playbin自行構建鏈路。 環境配置: Ubuntu16 之後自帶Gstreamer 的庫,可以直接用無需安裝 程式碼編譯執行前需要設定如下環境變數: export

利用ffmpeg獲取rtsp視訊流並使用opencv播放

/*opencv庫*/ #include <opencv2\opencv.hpp> #include <iostream> extern "C" /*這裡必須要使用C方式匯入*/ { #include "libavcodec/avcodec.h"

VLC播放RTSP視訊流(360瀏覽器可用)

<!--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

使用VideoView播放rtsp視訊流

1.視訊播放控制 package com.example.rtspvideoview; import android.app.ProgressDialog; import android.content.Context; import android.media.Medi

一個基於JRTPLIB的輕量級RTSP客戶端(myRTSPClient)——實現篇:(六)RTP音視頻傳輸解析層之音視頻數據傳輸格式

客戶端 會有 服務 client 基本 cnblogs 存在 額外 導致 一、差異 本地音視頻數據格式和用來傳輸的音視頻數據格式存在些許差異,由於音視頻數據流到達客戶端時,需要考慮數據流的數據邊界、分包、組包順序等問題,所以傳輸中的音視頻數據往往會多一些字節。 舉個例子

流媒體協議之RTSP客戶端的實現20171014

叠代 jrtplib 訪問 pac .cpp 服務端 blog 文件 僅支持 RtspClient是基於jrtplib實現的,目前僅支持h264格式,後續將不斷叠代優化,加入對其他格式的支持,並且將實現RTSP的服務端。 RtspClient的功能是接收服務端過來流,然後寫

一個基於JRTPLIB的輕量級RTSP客戶端(myRTSPClient)——實現篇:(九)以g711-mulaw為例添加新的編碼格式解析支持

調用 pcm 2個 h265 pri 源碼 返回 .cn memcpy 一、myRtspClient音頻解析架構 AudioTypeBase是處理解析各種編碼的音頻數據的接口類。處理MPA數據的MPEG_Audio類和處理g711-mulaw的PCMU_Audio類均從Au

python opencv 讀取rtsp視訊流

import cv2 cap = cv2.VideoCapture("rtsp://admin:[email protected]:554//Streaming/Channels/1") ret,frame = cap.read() while ret: ret,frame =

使用ffmpeg+nginx進行rtsp視訊流至rtmp視訊流的轉換

說明: 作業系統:window server 2008 R2 步驟: 1、安裝ffmpeg: 2、安裝nginx 需要下載舊版nginx並安裝nginx-rtmp-module(我使用的是從網上下載的nginx-rtmp整合版,版本號:nginx:1.11.

git遠端倉庫實現遷移

由於工作需要,需要從老git遷移專案到新的git,遷移內容包括提交歷史以及分支等資訊,使用傳統的git clone,修改遠端分支無法達成目標。   先在新的遠端git上新建一個project 克隆原有倉庫   git clone --bare 

iOS 視訊播放實現:AVPlayerViewController

直接上程式碼 - (void)viewDidLoad {     [super viewDidLoad];     [self.view addSubview:self.moviePlayer.view];     [self.moviePlayer.player p

Android視訊播放實現的三種辦法(MediaPlayer+SurfaceView,VideoView,Vitamio框架)

今天來說一下Android中怎麼實現視訊播放,我主要說三種:1.MediaPlayer+SurfaceView;2.VideoView;3.Vitamio框架。1.MediaPlayer+SurfaceView這種方法是基礎,後面的兩種方法其實就是把這種方法封裝了一下,使用起來

搭建rtmp直播流服務之3:java開發ffmpeg實現rtsp轉rtmp並實現ffmpeg命令的介面化管理架構設計及程式碼實現

這一篇將進一步深挖java對ffmepg命令的控制並最終實現服務介面化 通知:由於很多同學反映本章程式碼的命令封裝設計的不是很好,所以對本章程式碼重新進行了實現,新版本推翻了本章原有程式碼內部實現,介面設計更加利於注入自己的實現,並增加可執行原生ffmpeg命令功

Windows遠端桌面實現之四(在現代瀏覽器中通過普通頁面訪問遠端桌面)

                                        by Fanxiushu 2017-12-21   轉載或引用請註明原始作者。 前幾篇文章分別闡述瞭如何抓取windows桌面影象,以及相關攝像頭,電腦內部聲音等採集,相關連線如下:http:

遠端電錶 無線遠端電錶實現方法

遠端電錶 無線遠端電錶實現方法 功能快捷鍵 使用注意事項: 本系統表號是出廠時電錶的編號 本售電系統的年售電次數最多為80萬次。 由於資料庫存有售電記錄,聯網遠端電錶,請務必保護好資料庫,做好資料庫的備份工作。不是萬不得已的情況下不要隨意重灌作業系

利用ssh與區域網內主機建立遠端連線實現區域網穿透

  公司新開發的專案,利用嵌入式linux系統,要求其中的軟體能夠支援遠端升級,個人感覺如果能實現遠端操作會更方便一些,於是在網上搜尋方法,當時的想法是希望能夠找到一種ssh代理服務,能夠實現兩臺不同