視頻直播之推流

基于Nginx服務器通過ffmpeg命令來進行推流
  • 1.首先要在Mac下搭建Nginx+rtmp服務器,打開終端,直接復制,查看是否安裝了Homebrew
man brew

如果已經(jīng)安裝了,會這么顯示,此時輸入Q退出即可, 直接進入第二步.反之, 如果沒有安裝,執(zhí)行命令

Snip20161108_10.png
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果安轉(zhuǎn)之后想要卸載的話,輸入以下命令

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
  • 2.安裝nginx

先clone nginx項目到本地

brew tap homebrew/nginx

執(zhí)行安裝:

brew install nginx-full --with-rtmp-module

此時, nginx和rtmp模塊就安裝好了輸入命令:

nginx

在瀏覽器里打開http://localhost:8080,如果出現(xiàn)下面的圖,就表示安轉(zhuǎn)成功

Snip20161108_11.png
  • 3.配置nginxrtmp
brew info nginx-full

執(zhí)行完之后拖到最下面看到

Snip20161108_13.png

可以看到nginx的配置信息在/usr/local/etc/nginx/nginx.conf這個路徑,前往可以發(fā)現(xiàn)nginx.conf文件,可以用Xcode打開
直接滾到最后一行

http { 
     ……
}
#在http節(jié)點下面(也就是文件的尾部)加上rtmp配置:
rtmp { 
     server { 
          listen 1935; 
          application rtmplive  {
                      live on; 
                      record off; 
               } 
       }
}

rtmp是協(xié)議名稱
server說明內(nèi)部中是服務器相關配置
listen 監(jiān)聽的端口號,
rtmp協(xié)議的默認端口號是1935
application訪問的應用路徑是 rtmplive
live on 開啟實時
record off 不記錄數(shù)據(jù)

  • 4.重啟nginx(其中的1.10.2要換成你自己安裝的nginx版本號, 查看版本號用nginx -v命令即可)
/usr/local/Cellar/nginx-full/1.10.2/bin/nginx -s reload
  • 5.安裝ffmpeg
brew install ffmpeg

這個要等一會,我用了大概5分鐘左右,如果我沒有記錯的話是50.4M,下載完之后,再安裝一個支持 rtmp協(xié)議的視頻播放器VLC鏈接,下面就可以正式開始推流啦,命令中的1935rtmp默認端口號,rtmplive是訪問的應用路徑,上面解釋的有。

ffmpeg -re -i /Users/xsx/Downloads/項目管理小知識系列之預算編制.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/rtmplive/room

/Users/xsx/Downloads/項目管理小知識系列之預算編制.mp4是我桌面準備的一個用于推流的視頻,輸入命令之后會看到,文件一點一點被推到服務器。

Snip20161108_15.png

然后打開VLC,File->open network->輸入:

Snip20161108_9.png

然后就可以看到服務器一邊推流,VLC上面一邊播放。剛開始可能會有點延遲

Untitled-2.gif
  • 6.額外補充:
6.1如果希望將桌面錄制或者分享,可以使用命令行如下:

首先查看ffmpeg是否支持對應的設備,在OSX下面,Video和Audio設備使用的是avfoundation,所以可以使用AVFoundation來查看

ffmpeg -f avfoundation -list_devices true -i ""
Snip20161108_16.png
ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/rtmplive/home

然后就OK啦,效果如下:

Untitled-1.gif
6.2如果需要桌面+麥克風,比如一般做遠程教育分享 命令行如下:
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
6.3.如果需要桌面+麥克風,并且還要攝像頭拍攝到自己,比如一般用于互動主播,游戲主播,命令行如下
ffmpeg -f avfoundation -framerate 30 -i "1:0" -f avfoundation -framerate 30 -video_size 640x480 -i "0" -c:v libx264 -preset slow -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home

我的出現(xiàn)了這樣的錯誤,說是不支持yuv420p格式的,目前正在解決中...


Snip20161108_17.png

接下來介紹另外一種推流的方式:

利用LFLiveKit實現(xiàn)推流,這里參考了文章
  • 推流前的工作是:采集,處理,編碼壓縮
  • 推流中要做的是:封裝,上傳



** LFLiveKit **默認支持的格式是RTMPFLV同時,結(jié)構(gòu)也非常容易去延展.支持

  • 后臺記錄
  • 水平垂直記錄(橫屏和豎屏)
  • 美顏
  • H264 AAC硬編碼
  • 弱網(wǎng)絡失幀
  • 動態(tài)轉(zhuǎn)換速率
  • 音頻視頻 音頻靜音配置
  • PTMP轉(zhuǎn)換
  • 切換攝像頭
  • 支持發(fā)送緩沖區(qū)
  • FLV包裝和發(fā)送

首先在你的項目里用CocoaPods集成

 platform :ios, '8.0'
 target 'LFLiveKit 視頻推流' do
 pod 'LFLiveKit'
 end

主要代碼是設置session配置AudioConfigurationVideoConfiguration

- (LFLiveSession *)session {
    if (_session == nil) {
        
        LFLiveAudioConfiguration *audioConfiguration = [LFLiveAudioConfiguration new];
        audioConfiguration.numberOfChannels = 2;
        audioConfiguration.audioBitrate = LFLiveAudioBitRate_128Kbps;
        audioConfiguration.audioSampleRate = LFLiveAudioSampleRate_44100Hz;
        
        LFLiveVideoConfiguration *videoConfiguration = [LFLiveVideoConfiguration new];
        videoConfiguration.videoSize = CGSizeMake(1280, 720);
        videoConfiguration.videoBitRate = 800*1024;
        videoConfiguration.videoMaxBitRate = 1000*1024;
        videoConfiguration.videoMinBitRate = 500*1024;
        videoConfiguration.videoFrameRate = 15;
        videoConfiguration.videoMaxKeyframeInterval = 30;
        videoConfiguration.videoSizeRespectingAspectRatio = YES;
        videoConfiguration.outputImageOrientation = UIInterfaceOrientationPortrait  ;
        videoConfiguration.sessionPreset = LFCaptureSessionPreset720x1280;
        
        _session = [[LFLiveSession alloc]initWithAudioConfiguration:audioConfiguration videoConfiguration:videoConfiguration];
        _session.running = YES;
        _session.preView = self;
    }
    return _session;
}

開始直播:

LFLiveStreamInfo *stream = [LFLiveStreamInfo new];
                stream.url = @"rtmp://10.118.164.64/rtmplive/room";
                [_self.session startLive:stream];

結(jié)束直播

[_self.session stopLive];

然后運行,在VLC的File->open network->輸入rtmp://10.118.164.64/rtmplive/room
就可以同步直播了,左邊的是VLC上面的畫面,右邊的是我自己手機的畫面

Untitled-2.gif
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容