導航:首頁 > 源碼編譯 > ios視頻監控源碼

ios視頻監控源碼

發布時間:2022-11-28 12:33:06

A. 誰做過webrtc的安卓和IOS視頻監控

我知道一家,做過webrtc的安卓和IOS視頻,魔豹技術。

B. iOS 視頻硬解碼

公司的項目里有拉取H.264視頻流進行解碼播放的功能,本來是採用FFMpeg多媒體庫,用CPU做視頻的編碼和解碼,就是大家常說的軟編軟解。但是軟解存在太佔用CPU,解碼效率低等缺點,所以我們一合計乾脆用硬解碼代替原來的方案。當然硬體解碼使用的當然就是蘋果大名鼎鼎的 Video ToolBox 框架,眾所周知,蘋果在iOS8開始才可以在iOS系統中調用該框架中的 API 。

圖2.1展示的是通過 AVSampleBufferDisplaylayer 播放網路上獲取的H.264碼流。

但並不是說 AVSampleBufferDisplaylayer 能直接播放H.264碼流,需要將H.264碼流包裝成 SampleBuffer 傳給給 AVSampleBufferDisplaylayer 解碼播放。

再來看一下H.264碼流的構成,H.264碼流由一系列的 NAL 單元組成。
NAL 單元一般包含:

所以如果要將H.264解碼播放就需要將H.264碼流包裝成CMSampleBuffer。由圖1.1可得 CMSampleBuffer = CMTime + CMVideoFormatDesc + CMBlockBuffer 。
解碼步驟:
1.從網路獲取的碼流中獲取SPS和PPS生成CMVideoFormatDesc。

(1)H.264 NALU 單元的 Start Code 是"0x 00 00 01" 或"0x 00 01",按照 Start Code 定位NALU。
(2)通過類型信息找到 SPS 和 PPS 並提取,開始碼後第一個 byte 的第5位,7代表 SPS ,8代表 PPS 。

(3)使用函數來構建CMVideoFormatDescription。

2.提取視頻圖像數據生成CMBlockBuffer。
(1)按照 Start Code 定位NALU。
(2)CMBlockBuffer數據需要的頭部碼為4個位元組的長度,為:0x 00 80 00,所以需要將H.264的header給替換掉。

(3) 介面構造 CMBlockBufferRef 。

3.根據自己的需要設置CMTime
我的項目中的拉取的實時流需要實時播放,不需要設置時間間隔,所以不用設置CMTime。

4.根據上述得到 CMVideoFormatDescriptionRef 、 CMBlockBufferRef 和可選的時間信息,使用 CMSampleBufferCreate 介面得到 CMSampleBuffer 數據這個待解碼的原始的數據。

5.用 AVSampleBufferDisplayLayer 處理得到 sampleBuffer 來顯示圖像。

至此成功用 Video Toolbox 硬體解碼H.264碼流,並在設備上播放視頻。
可是,如果我們要拿到每一幀圖像進行處理呢,那該怎麼得到?
那麼我們還需要用 VTDecompressionSession 解碼成 CVPixelBuffer ,通過 UIImageView 或者 OpenGL ES 上顯示。
(1)創建 VTDecompressionSession ,需要以下參數:

(2)調用 VTDecompresSessionDecodeFrame 介面進行解碼。

(3)回調函數中可以得到解碼後的結果 CVPixelBuffer ,可以將 CVPixelBuffer 轉換成UIImage圖像顯示在ImageView上或者用 OpenGL ES 渲染圖像。

C. iOS端海康威視攝像頭接入

歡迎各位客官大老爺進QQ群交流: 257011323 (SDK都在群共享)

這幾天公司要求在手機端需要看到海康威視的監控視頻,網上找了半天也沒有現成能用的demo。後來向海康威視的技術人員要了份demo,在這里總結一下。另外需要Demo的可以私信我。

其中

其中mspInfo就是所需的登錄信息

內網測試環境為http://10.33.27.240

如果進行遞歸遍歷,可以獲取到所有設備以及播放通道。
獲取到的資源數組中如果是屬於CCameraInfo 類或其子類的,就是可以用於播放的設備,將所需的參數傳遞過去即可
伺服器地址、登錄信息MspInfo以及監控點信息cameraInfo

_realPlayURL = [[CRealPlayURL alloc] init];
BOOL result = [vmsNetSDK getRealPlayURL:伺服器地址
toSessionID:_mspInfo.sessionID
toCameraID:_cameraInfo.cameraID
toRealPlayURL:_realPlayURL
toStreamType:STREAM_SUB]; //StreamType=0時,返回主碼流和MAG地址,其=1時返回子碼流和MAG地址

CDeviceInfo *deviceInfo = [[CDeviceInfo alloc] init];
result = [vmsNetSDK getDeviceInfo:_serverAddress
toSessionID:_mspInfo.sessionID
toDeviceID:_cameraInfo.deviceID
toDeviceInfo:deviceInfo];

//填充vidioInfo
VideoPlayInfo *videoInfo = [[VideoPlayInfo alloc] init];
//監控點ID
videoInfo.strID = _cameraInfo.cameraID;
//取流協議類型 UDP或TCP
videoInfo.protocalType = PROTOCAL_UDP;
//播放模式,實時預覽或者遠程回放
videoInfo.playType = REAL_PLAY;
//取流方式,目前只支持從流媒體
videoInfo.streamMethod = STREAM_METHOD_VTDU;
//主子碼流
VP_STREAM_TYPE streamType = STREAM_SUB;
videoInfo.streamType = streamType;
//播放的控制項 UIView即可
videoInfo.pPlayHandle = (id)self.playView;
//是否要開啟轉封裝
videoInfo.bSystransform = NO;
//播放地址
videoInfo.strPlayUrl = _realPlayURL.url1;

// 獲取VideoPlaySDK 播放句柄
if (_vpHandle == NULL)
{
_vpHandle = VP_Login(videoInfo);
}

D. 各位大牛,請問一下ios開發視頻實時監控如何做救急…………

這個需要相當於視頻直播,現在一般都用第三方平台的sdk,例如容聯雲等第三方的視頻直播即可。

E. iOS WebRTC 雜談之 視頻採集添加美顏特效

使用WebRTC進行互動直播時,我們希望採集的畫面可以添加美顏特效,現有兩套解決方案:

方案一的思路是替換WebRTC的原生採集,使用GPUImageVideoCamera替換WebRTC中的視頻採集,得到經過GPUImage添加美顏處理後的圖像,發送給WebRTC的OnFrame方法。
方案二的思路是拿到WebRTC採集的原始視頻幀數據,然後傳給GPUImage庫進行處理,最後把經過處理的視頻幀傳回WebRTC。

通過查閱WebRTC源碼發現,WebRTC原生採集和後續處理的圖像格式是NV12(YUV的一種),而GPUImage處理後的Pixel格式為BGRA,因此無論使用方案一還是方案二都需要進行像素格式轉換。下面來介紹方案一的實現方法(方案二和方案一並無本質區別,可參考方案一的實現思路)。

在實現該方案前,我們先介紹幾個必須掌握的知識:

iOS視頻採集支持三種數據格式輸出:420v,420f,BGRA。

420f 和 420v 都是YUV格式的。 YUV是一種顏色編碼方法,分為三個分量,Y表示亮度(Luma),也稱為灰度。U和V表示色度(chroma)描述色彩與飽和度。YUV的存儲格式分為兩大類:planar和packed。planar(平面)先連續存儲所有像素點的Y,然後存儲所有像素點的U,隨後是所有像素點的V。packed是將每個像素點的Y,U,V交叉存儲的。 我們最終需要的,用於WebRTC編解碼的像素格式是kCVPixelFormatType_420YpCbCr8BiPlanarFullRange的,即雙平面的YUV420,Y和UV分開存儲,這對後面我們的格式轉換非常重要。

420f和420v的區別在於Color Space。f指Full Range,v指Video Range。
Full Range的Y分量取值范圍是[0,255]
Video Range的Y分量取值范圍是[16,235]
從採集編碼到解碼渲染,整個過程中,顏色空間的設置都必須保持一致,如果採集用了Full Range 而播放端用Video Range,那麼就有可能看到曝光過度的效果。

BRGA是RGB三個通道加上alpha通道,顏色空間對應的就是它在內存中的順序。比如kCVPixelFormatType_32BGRA,內存中的順序是 B G R A B G R A...。

大端模式(Big-endian),是指數據的高位元組保存在內存的低地址中,而數據的低位元組保存在內存的高地址中,這樣的存儲模式有點兒類似於把數據當作字元串順序處理:地址由小向大增加,而數據從高位往低位放;這和我們的閱讀習慣一致。
小端模式(Little-endian),是指數據的高位元組保存在內存的高地址中,而數據的低位元組保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低。
iOS採用的是小端存儲。

LibYUV是Google開源的實現各種YUV與RGB之間相互轉換、旋轉、縮放的庫。
上面提到WebRTC使用的圖像格式為NV12,而通過GPUImage採集到的圖像格式為BGRA,因此,就需要做BGRA→NV12的轉換。

iOS中採用的是小端模式, libyuv中的格式都是大端模式。小端為BGRA,那麼大端就是ARGB,所以我們使用libyuv::ARGBToNV12。

下面介紹方案一的具體實現:

修改 avfoundationvideocapturer.mm 中的 - (BOOL)setupCaptureSession 方法,啟動GPUImage採集,在回調中拿到BGRA格式的CMSampleBuffer。並修改 - (void)start 和 - (void)stop ,確保採集的啟停功能正常。
這里便得到了添加美顏等特效的BGRA源視頻幀數據。

先獲取BGRA格式的pixelBuffer首地址,並創建轉換後NV12格式的內存地址*dstBuff,使用libyuv::ARGBToNV12進行轉換,最終我們得到了存儲NV12數據的內存地址dstBuff。

pixelBufferAttributes 這個參數是optional的,但是卻非常重要。它指定創建時是否使用IOSurface框架,有無這個參數最後創建的Pixelbuffer略有不同,經測試,如不寫這個參數,在iOS13中將無法創建正常可用的pixelBufferRef。

上面提到,NV12是雙平面的YUV420格式,即在dstBuff中Y和UV分開存儲,因此我們需要分別逐行拷貝Y和UV。
注意: 在操作CVPixelBuffer之前,一定要記得先進行加鎖,防止讀寫操作同時進行。

以UV拷貝為例:

這里便得到了NV12格式CVPixelBuffer。

最終交付給WebRTC處理的是CMSampleBuffer,因此我們需要做CVPixelBuffer→CMSampleBuffer的轉換:

這里就得到了可用於WebRTC的經過GPUImage處理的CMSampleBuffer,然後將CMSampleBuffer傳給WebRTC的OnFrame方法即可。
到這里就完成了為WebRTC的視頻添加美顏等特效。其中的坑還是要自己踩過才印象深刻。其中要著重注意iOS13的崩潰問題。

F. 監控設備怎麼在ios手機上實現

下載相應監控錄像機品牌的app軟體到手機上,然後根據監控錄像機裡面的網路設置,在手機端進行添加即可。

目前常用的是海康威視的監控錄像機,如果是今年買的機器,基本上機器上面都有一個app提供掃描下載(app也可以單獨下載, 叫「螢石雲視頻」)。螢石雲很方便,只要在監控錄像機的網路設置裡面開啟螢石雲並連接網線,然後打開手機端螢石雲,用你的手機號注冊並登陸,點擊右上角的「+」號,允許訪問手機攝像頭,再次掃描監控錄像機底部的設備二維碼即可。如果沒有螢石雲功能,也可在app store裡面單獨下載ivms-4500應用,但是這個需要你在監控錄像機中進行相關設置,比如開啟DDNS,並設置機器ip地址。然後在手機端ivms-4500中進行相關設置即可。

G. GitHub 上有哪些完整的 iOS-App 源碼值得參考

1. Coding iOS 客戶端

Coding官方客戶端. 筆者強烈推薦的值得學習的完整APP.
GitHub - Coding/Coding-iOS: Coding iOS 客戶端源代碼
2. OSCHINA 的 iPhone 客戶端
開源中國的iPhone客戶端源碼
https://git.oschina.net/oschina/iphone-app
3. Git@OSC
Git@OSC iPhone 客戶端,方便用戶查看Git@OSC的項目以及簡單的操作issue等
oschina / git-osc-iphone
4. Firefox for iOS
GitHub - mozilla/firefox-ios: Firefox for iOS
5. zulip-ios
Dropbox收購公司內部社交服務商Zulip,然後全部開源,這是iOS App
GitHub - zulip/zulip-ios: Zulip iOS app
6. iOSSF
SegmentFault官方App
GitHub - gaosboy/iOSSF: SegmentFault官方App
7. iReddit
Reddit iPhone客戶端
GitHub - reddit/iReddit: The iReddit iPhone app
8. Monkey
GitHub第三方iOS客戶端
GitHub - coderyi/Monkey: Monkey is a GitHub third party client for iOS,to show the rank of coders and repositories.
9. Watch
Dribbble第三方客戶端
GitHub - tuesda/Watch: A project which demonstrate how to develop a custom client on android for dribbble.com
10. Voice2Note
懶人筆記iOS客戶端
GitHub - liaojinxing/Voice2Note: 懶人筆記iOS客戶端
11. RSSRead
「已閱」(iOS上開源RSS新聞閱讀器)
GitHub - ming1016/RSSRead: 「已閱」(iOS上開源RSS新聞閱讀器),有興趣?那就Pull Requests吧
12. BeeFancy
BeeFancy仿Fancy官方APP的WIREFRAME,基於BeeFramework
GitHub - BeeFramework/BeeFancy: 仿Fancy官方APP的WIREFRAME,基於BeeFramework
13. SXNews
模仿網易新聞做的精仿網易新聞
GitHub - dsxNiubility/SXNews: High imitation Neteasy News. (include list,detail,photoset,weather,feedback)
14. Doppio
尋找最近的星巴克
GitHub - chroman/Doppio: An open source iOS app to find the nearest Starbucks store using NSURLSession, AFNetworking 2.0, Mantle and Starbucks private API.
15. Anypic
類似於Instagram的一款App
GitHub - ParsePlatform/Anypic: An open source mobile and web app that lets users share photos similar to Instagram
16. 豆瓣相冊
Slowslab iOS應用 豆瓣相冊 精選集 開源項目
GitHub - TonnyTao/DoubanAlbum: Slowslab iOS應用 豆瓣相冊 精選集 開源項目,僅供學習參考
17. ChatSecure-iOS
Objective-C寫的XMPP聊天應用
GitHub - ChatSecure/ChatSecure-iOS: ChatSecure is a free and open source encrypted chat client for iPhone and Android that supports OTR encryption over XMPP.
18. NotificationChat
Objective-C寫的完整的聊天應用
GitHub - relatedcode/EncryptedChat: This is a full native iPhone app to create realtime, text based group or private chat with Parse and Firebase.
19. FakeZhihuDaily
仿知乎日報iOS客戶端
GitHub - gnou/FakeZhihuDaily: 仿知乎日報iOS客戶端
20. ruby-china-for-ios
RubyChina官方客戶端
GitHub - ruby-china/ruby-china-for-ios: Ruby China client for iOS
21. Meizi
豆瓣妹子圖iOS客戶端
GitHub - Sunnyyoung/Meizi: 豆瓣妹子圖iOS客戶端
22. PlainReader
一款 iOS(iPhone + iPad) 新聞類客戶端,內容抓取自http://cnBeta.com
PlainReader/PlainReader at master · guojiubo/PlainReader · GitHub
23. iOS-2048
用Objective-C實現的2048游戲
GitHub - austinzheng/iOS-2048: iOS drop-in library presenting a 2048-style game
24. ECMobile_iOS
基於ECShop的手機商城客戶端
GitHub - GeekZooStudio/ECMobile_iOS: 基於ECShop的手機商城客戶端
25. wikipedia-ios
維基網路官方App, 已上架
GitHub - wikimedia/wikipedia-ios: The official Wikipedia iOS app.
26. Sol
漂亮的扁平風格的天氣App
GitHub - comyarzaheri/Sol: Sol° beautifully displays weather information so you can plan your day accordingly. Check the weather in your current location or any city around the world. Implemented in Objective-C.

H. iOS 視頻播放器的實現

最近工作之餘, 寫了一個視頻播放器,輸入要播放的視頻資源地址,即可實現播放功能。
目前功能比較簡單,支持鎖屏、屏幕旋轉等基礎功能,後續會繼續完善。。。

下面講解下實現思路:

因 <MediaPlayer/MediaPlayer.h> 中 MPMoviePlayerController MP_DEPRECATED("Use AVPlayerViewController in AVKit.", ios(2.0, 9.0)) 在iOS9以後已經廢棄,為了更好的兼容性,採用了 <AVFoundation/AVFoundation.h> 為技術實現方案。

框架在此就不講解了,官網講的比較清楚,不懂的可以查看官檔。 -> 戳這里

監聽視頻資源的載入狀態, 根據不同的狀態進行相應的操作。

更新視頻資源的播放進度。

實現控制視圖 QYPlayerControlView 的Delegate。 當控制視圖進行了相應操作,事件被傳遞到該類中進行統一處理。

該類中還有對操作視圖 顯示/隱藏 的方法。

後續調整視頻亮度、音量、進度等手勢都需添加在該分類中,便於統一管理。

主要存放時間轉換的分類 NSString+Custom 、常用宏 QYPlayerDefine 等工具類。

1). BaseViewController 中實現了控制屏幕旋轉的系統方法,實現的控制器要繼承自 BaseViewController 。

2). 在子控制器中實現如下方法。

此時屏幕旋轉功能已經添加成功!

以上便是整個播放器的源碼解析,具體的細節請查看源碼。

源碼放在GitHub上了,想查看的小夥伴可以 ->戳這里。

千里之行,始於足下。

I. 海康,大華監控設備的ios視頻監控客戶端怎麼實現

手機監控,常用的有2種方式,一種是直接通過手機瀏覽器來觀看,另一種是在手機上安裝監控客戶端軟體來觀看。我知道海康,大華,網視無憂等品牌的網路攝像機都是支持手機觀看監控視頻。你手機的這個型號,我估計是可以的,建議詳細找銷售人員了解。

J. iOS 源碼探索的三種方式

iOS 開發探索源碼的方法有三種:符號斷點直接跟流程;control + step into;匯編跟流程。下面根據圖文的形式介紹這三種方式

首先我們在 ViewController 的 viewDidLoad 方法中下個斷點

運行項目,此時會在我們打的斷點處停留,此時,選擇符號斷點

輸入要查找的方法名,enter 符號斷點已生效

之所以在 viewDidLoad 的斷點到來之後再打 alloc 的符號斷點,因為 alloc 的調用很多,如果運行前開啟不能精準的定位是不是 Person 的 alloc 方法。點擊進入下一步

alloc 符號斷點斷住的堆棧調用情況,從下圖可以看出 alloc 的源碼位於libobjc.A.dylib庫

運行項目,此時會在我們打的斷點處停留,按住 control 鍵,點擊 step into

進去後,顯示

此時打開符號斷點,輸入 objc_alloc

點擊 enter,符號斷點就會顯示 objc_alloc 所在的源碼庫

運行項目,此時會在我們打的斷點處停留,工具欄選擇 Debug --> Debug Workflow --> Always Show Disassembly,通過匯編跟流程

此時會跳轉到匯編,顯示如下

按住 control 鍵, 點擊 step into 鍵,執行,之後看到斷點在 objc_alloc 處

同樣通過 objc_alloc 的符號斷點,得到源碼所在庫

閱讀全文

與ios視頻監控源碼相關的資料

熱點內容
程序員上海與北京 瀏覽:404
安卓手機的動態照片為什麼卡 瀏覽:538
ad編譯集成庫時最常見的問題 瀏覽:845
matlab微分方程編程 瀏覽:700
安卓手機如何打開esp文件 瀏覽:545
什麼app能安裝應用 瀏覽:199
手機用什麼app看電視劇電影好 瀏覽:603
導入原理圖為什麼文件夾不顯示 瀏覽:653
androidapp風格 瀏覽:209
php取伺服器url地址 瀏覽:293
linux時間調度演算法 瀏覽:769
單片機最小電路詳解 瀏覽:185
請求要求命令 瀏覽:806
電腦文件夾發微信顯示被佔用 瀏覽:295
手機怎麼看加密視頻 瀏覽:206
怎樣解壓手機es文件包 瀏覽:661
2017年學什麼編程 瀏覽:935
金融期貨pdf 瀏覽:694
程序員客棧的信息保密嗎 瀏覽:507
編程顯示器什麼意思 瀏覽:147