导航:首页 > 源码编译 > 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视频监控源码相关的资料

热点内容
app反编译不完整 浏览:786
电脑上的文件夹怎么调整 浏览:5
服务器无响应是什么原因呀 浏览:984
wd文档里的app怎么制作 浏览:513
电脑里的文件夹没有了一般能恢复吗 浏览:418
哪里有配加密钥匙的 浏览:210
服务器开不了机怎么把数据弄出来 浏览:958
gif动态图片怎么压缩 浏览:521
黑猴子棒球压缩文件解压密码 浏览:631
如何让app适应不同的手机屏幕大小 浏览:10
苹果手机如何给安卓手机分享软件 浏览:761
苹果电脑怎么运行腾讯云服务器 浏览:59
明日之后沙石堡命令助手 浏览:261
蛋糕店用什么样的app 浏览:877
长安银行信用卡app怎么取现 浏览:635
dos命令cmd命令的 浏览:226
阿里云存档视频文件的服务器 浏览:194
ftp修改文件权限命令 浏览:491
周易八卦梅花算法 浏览:676
java组织机构 浏览:953