日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

直播技术汇总

發布時間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 直播技术汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

做一款仿映客的直播App?看我就夠了

直播時代--IOS直播客戶端SDK,美顏直播

直播技術匯總

一、直播一些技術名詞

1、什么是?FFmpeg?,FFmpeg?是一個開源免費跨平臺的視頻和音頻流方案,屬于自由軟件,它提供了錄制、轉換以及流化音視頻的完整解決方案。直播系統多使用該方案。

2、什么是?RTMP(Real Time Messaging Protocol:實時消息傳輸協議)Adobe公司開發。一個專門為高效傳輸視頻,音頻和數據而設計的協議。它通過建立一個二進制TCP連接或者連接HTTP隧道實現實時的視頻和聲音傳輸。

?

二、直播整體技術實現

?

技術相對都比較成熟,設備也都支持硬編碼。iOS還提供現成的 Video ToolBox框架,可以對攝像頭和流媒體數據結構進行處理,但Video ToolBox框架只兼容8.0以上版本,8.0以下就需要用x264的庫軟編了。

github上有現成的開源實現,推流、美顏、水印、彈幕、點贊動畫、濾鏡、播放都有。技術其實不是很難,而且現在很多云廠商都提供SDK,七牛云、金山云、樂視云、騰訊云、百度云、斗魚直播伴侶推流端,功能幾乎都是一樣的,沒啥亮點,不同的是整個直播平臺服務差異和接入的簡易性。后端現在 RTMP/HTTP-FLV 清一色,App掛個源站直接接入云廠商或CDN就OK。

?

1、直播項目傳輸方式介紹

?

2、直播項目采集端(推送端)介紹

推流端可以選擇很多GitHub上的開源項目,比如VideoCore?、LiveVideoCoreSDK?、LFLiveKit?。商用的話可以選擇各大廠商的SDK,網易直播云、七牛、騰訊、百度、新浪。使用直播云的好處就是能快速上線App,功能十分齊全,可以播放器和推流端,服務器一套下來,有專業客服人員幫助集成到工程中,缺點就是流量費太貴了,具體可以了解下各大廠商的收費標準。

?

2.1.目前比較知名的有VideoCore

目前國內很多知名的推流框架都是對VideoCore的二次開發。這個框架主要使用C++寫的,支持RTMP推流,但對于iOS開發者來說有點晦澀難懂(精通C++的除外)。想開源和免費的可以選擇現在的幾個知名項目VideoCore + GPUImage+基于GPU的美顏濾鏡 ,播放用IJKPlayer自己修改。

?

2.2.國內比較火的LiveVideoCoreSDK

框架提供iOS蘋果手機的RTMP推流填寫RTMP服務地址,直接就可以進行推流,SDK下載后簡單的工程配置后能直接運行,實現了美顏直播和濾鏡功能,基于OpenGL,前后攝像頭隨時切換,提供RTMP連接狀態的回調。

這個框架是國內比較早的一款推流框架有不少在使用這個SDK,功能非常齊全,作者也比較牛,用來學習推流采集相關內容非常好,但是集成到工程中有些困難(對于我來說)。總的來說這是一款非常厲害的推流SDK,幾乎全部使用C++寫的,編譯效率非常好,如果有實力的話推薦使用這個框架來做自己項目的推流端。

?

2.3.可讀性比較好的推流LFLiveKit

框架支持RTMP、HlS (HTTP Live Streaming:蘋果自家的動態碼率自適應技術) 。主要用于PC和Apple終端的音視頻服務。包括一個m3u(8)的索引文件,TS媒體分片文件和key加密串文件。

推薦這個框架第一是因為它主要使用OC寫的,剩下的用C語言寫的,框架文件十分清晰,這對不精通C++的初學者提供了很大的便利,并且拓展性非常強,支持動態切換碼率功能,支持美顏功能。

?

2.4.美顏功能

美顏的話一般都是使用GPUImage?的基于OpenGl開發,純OC語言,這個框架十分強大,可以做出各種不同濾鏡,可拓展性高。如果對美顏沒有具體思路可以直接用BeautifyFace?,可以加入到項目中,很方便的實現美顏效果。

?

3、直播項目播放端介紹

播放端用的針對RTMP優化過的ijkplayer?,ijkplayer?是基于FFmpeg的跨平臺播放器,這個開源項目已經被多個 App 使用,其中映客、美拍和斗魚使用了 ijkplayer(8000+??) 。可以參考這篇博客獲取framework:iOS中集成ijkplayer視頻直播框架?。也可以直接下載別人已經集成好的framework:IJKMediaFramework.framework

播放方法:

- (void)goPlaying { ? ? //獲取url ? self.url = [NSURL URLWithString:_liveUrl]; ? _player = [[IJKFFMoviePlayerController alloc] initWithContentURL:self.url withOptions:nil]; ? ? UIView *playerview = [self.player view]; ? UIView *displayView = [[UIView alloc] initWithFrame:self.view.bounds]; ? ? self.PlayerView = displayView; ? [self.view addSubview:self.PlayerView]; ? ? // 自動調整自己的寬度和高度 ? playerview.frame = self.PlayerView.bounds; ? playerview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; ? ? [self.PlayerView insertSubview:playerview atIndex:1]; ? [_player setScalingMode:IJKMPMovieScalingModeAspectFill]; ? }

?

三、直播實踐 (直播和觀看都不支持模擬器)

基于LiveVideoCoreSDK完整項目源碼

1、搭建nginx+RTMP?服務器:Mac搭建nginx+rtmp服務器

i. 安裝nginx?(網頁服務器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的協議鏈接,以及一個負載均衡器和一個HTTP緩存) :

## clone nginx項目到本地 $ brew tap homebrew/nginx ## 執行安裝 $ brew install nginx-full --with-rtmp-module ## 成功之后 $ nginx

在瀏覽器里打開http://localhost:8080?如果出現下圖, 則表示安裝成功

ii. 配置nginx和RTMP:

## 查看nginx安裝到哪了 $ brew info nginx-full ... ... ==> Caveats Docroot is: /usr/local/var/www ? The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that nginx can run without sudo. ? nginx will load all files in /usr/local/etc/nginx/servers/.

找到nginx.conf?文件所在位置(/usr/local/etc/nginx/nginx.conf)?, 點擊Finder?->前往?->前往文件夾?->輸入/usr/local/etc/nginx/nginx.conf?-> 用記事本工具(推薦Sublime Text) 打開?nginx.conf。直接滾到最后一行, 在最后一個}?(即最后的空白處, 沒有任何{})后面添加:

# 在http節點后面加上rtmp配置: rtmp { ? server { # 端口一般使用4位,本人開始使用三位,一直有問題,折騰了半天! ? ? ? listen 7160; ? ? ? application denglibinglive { ? ? ? ? ? live on; ? ? ? ? ? record off; ? ? ? } ? } }

然后重啟nginx(其中的1.10.1要換成你自己安裝的nginx版本號, 查看版本號用nginx -v命令即可):

$ /usr/local/Cellar/nginx-full/1.10.1/bin/nginx -s reload

iii. 安裝FFmpeg:

$ brew install ffmpeg

iv. 下載能播放流媒體的播放器VLC

下載后安裝,打開 VLC,然后 File->open network(command+N)輸入:

rtmp://localhost:7160/denglibinglive/room

v.開始FFMpeg推流:

mp4視頻下載地址

下載視頻到桌面后,執行推流命令:

$ ffmpeg -re -i /Users/denglibing/Desktop/loginmovie.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:7160/denglibinglive/room

VLC便開始播放流媒體:

?

2、下載基于LiveVideoCoreSDK完整項目源碼

將項目中ViewController.m?的viewDidLoad?中改為如下:

- (void)viewDidLoad { ? [super viewDidLoad]; ? // Do any additional setup after loading the view, typically from a nib. ? ? [self UIInit]; ? ? _RtmpUrlTextField.text = @"rtmp://ossrs.net/live/123456"; // 注意 192.168.1.20 是你電腦的ip地址即nginx服務器地址,7160/denglibinglive/room 是博客上面對應的參數,切勿搞錯了。 ? _RtmpUrlTextField.text = @"rtmp://192.168.1.20:7160/denglibinglive/room"; }

iOS10?以上的手機需要在?info.plist?中加入直播所需要的權限:

<key>NSCameraUsageDescription</key> <string>運行項目使用相機</string> <key>NSAppleMusicUsageDescription</key> <string>運行項目使用多媒體</string> <key>NSMicrophoneUsageDescription</key> <string>運行項目使用麥克風</string>

運行即可直播!

?

3、直播項目采集端:從0到1開始集成LiveVideoCoreSDK

i. 在Desktop?新建文件夾HDLiveVideoCoreDemo?使用Xcode建立項目組(Workspace),命名為HDLiveVideoCoreDemo.xcworkspace?并保存在?HDLiveVideoCoreDemo?中:

?

ii、將基于LiveVideoCoreSDK完整項目源碼?源碼的LiveVideoCoreSDK?、LiveVideoCoreCoreSDK.xcodeproj、RtmpLivePushSDK?復制到文件夾HDLiveVideoCoreDemo?中:

?

iii、打開HDLiveVideoCoreDemo.xcworkspace?,新建?LiveVideoCoreDemo.xcodeproj?項目:

?

iv、分別將LiveVideoCoreSDK.xcodeproj?和?RtmpLivePushSDK.xcodeproj?拖入到項目組中:

?

v、將libLiveVideoCoreSDK?加入到LiveVideoCoreDemo?項目中,并添加對應所需要的系統框架和tdb文件:

AVFoundation.framework AudioToolbox.framework CFNetwork.framework CoreMedia.framework OpenGLES.framework VideoToolbox.framework CoreVideo.framework libz.tbd libstdc++.tbd

?

vi、到此為止,LiveVideoCoreSDK?依賴的環境系統文件已經集成到新項目中,接下來對項目進行必要的配置:

因為LiveVideoCoreSDK?不支持Bitcode?, 所以需要設置Enable Bitcode?為NO

因為LiveVideoCoreSDK.h?不在LiveVideoCoreDemo?項目中,所以需要 設置

Header Search Paths?:?../LiveVideoCoreSDK/

../LiveVideoCoreSDK/?這個是?LiveVideoCoreSDK.h?相對于LiveVideoCoreDemo.xcodeproj?的路徑。

?

vii、添加代碼運行。

- (void)viewDidLoad { ? [super viewDidLoad]; ? ? ? [[LiveVideoCoreSDK sharedinstance] LiveInit:[NSURL URLWithString:@"rtmp://192.168.1.20:7160/denglibinglive/room"] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Preview:self.view ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VideSize:(CGSizeMake(540, 960)) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BitRate:LIVE_BITRATE_800Kbps ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FrameRate:LIVE_VIDEO_DEF_FRAMERATE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? highQuality:true]; ? [LiveVideoCoreSDK sharedinstance].delegate = self; ? [[LiveVideoCoreSDK sharedinstance] connect]; ? ? [LiveVideoCoreSDK sharedinstance].micGain = 5; } ? //rtmp status delegate: - (void) LiveConnectionStatusChanged: (LIVE_VCSessionState) sessionState{ ? NSLog(@"RTMP狀態 : %d", (int)sessionState); }

LiveVideoCoreSDK?集成完畢!

Demo下載地址:HDLiveVideoCoreDemo

?

4、直播播放端:

播放端用的針對RTMP優化過的ijkplayer?,ijkplayer?是基于FFmpeg的跨平臺播放器,這個開源項目已經被多個 App 使用,其中映客、美拍和斗魚使用了 ijkplayer(8000+??) 。可以參考這篇博客獲取framework:iOS中集成ijkplayer視頻直播框架?。也可以直接下載別人已經集成好的framework:IJKMediaFramework.framework

集成也很簡單,新建項目,將下載的IJKMediaFramework.framework?加入到項目即可:

- (void)viewDidLoad { ? [super viewDidLoad]; ? ? //rtmp://live.hkstv.hk.lxdns.com:1935/live/hks (流媒體數據) ? //rtmp://10.0.44.72:1935/denglibinglive/room (本地局域網的服務地址,局域網內測試直播和播放) ? //rtmp://115.28.135.68:1935/yuzhouheike/room (別人搭建好的云主機服務地址,支持不在局域網的直播和播放) ? _moviePlayer = [[IJKFFMoviePlayerController alloc] initWithContentURLString:@"rtmp://115.28.135.68:1935/yuzhouheike/room" withOptions:nil]; ? _moviePlayer.view.frame = self.view.bounds; ? // 填充fill ? _moviePlayer.scalingMode = IJKMPMovieScalingModeAspectFill; ? // 設置自動播放(必須設置為NO, 防止自動播放, 才能更好的控制直播的狀態) ? _moviePlayer.shouldAutoplay = NO; ? [self.view insertSubview:_moviePlayer.view atIndex:0]; ? [_moviePlayer prepareToPlay]; ? ? // 設置監聽 ? [self initObserver]; } ? ? - (void)initObserver{ ? [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stateDidChange) name:IJKMPMoviePlayerLoadStateDidChangeNotification object:self.moviePlayer]; } ? - (void)stateDidChange{ ? if ((self.moviePlayer.loadState & IJKMPMovieLoadStatePlaythroughOK) != 0) { ? ? ? if (!self.moviePlayer.isPlaying) { ? ? ? ? ? [self.moviePlayer play]; ? ? ? } ? } }

Demo下載地址:HDIJKMediaSDKDemo

from:http://blog.csdn.net/u012390519/article/details/52871859

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的直播技术汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。