iosvps,iosvp试用7天
本文目录:
- 1、<"http://#%E4%B8%BA%E4%BB%80%E4%B9%88iOS%E6%B2%A1%E6%9C%89%E5%86%B3%E6%96%97%E5%9C%BA%E7%BD%91%E7%BB%9C%E6%A3%80%E6%B5%8B" title="为什么iOS没有决斗场网络检测" "">为什么iOS没有决斗场网络检测
- 2、<"http://#MAC/iOS%E5%88%A9%E7%94%A8FFmpeg%E8%A7%A3%E6%9E%90%E9%9F%B3%E8%A7%86%E9%A2%91%E6%95%B0%E6%8D%AE%E6%B5%81" title="MAC/iOS利用FFmpeg解析音视频数据流" "">MAC/iOS利用FFmpeg解析音视频数据流
- 3、<"http://#iOS%20H264,H265%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81%EF%BC%88Video%20encode)" title="iOS H264,H265视频编码(Video encode)" "">iOS H264,H265视频编码(Video encode)
- 4、<"http://#ios%E8%99%9A%E6%8B%9F%E7%AB%AF%E5%8F%A3IP" title="ios虚拟端口IP" "">ios虚拟端口IP
为什么iOS没有决斗场网络检测
ios 检测网络代理设置方法在 iPhone 和 iPod touch(iPad 界面布局略有不同)上找到“设置”图标,选择“Wi-Fi”项目,如下图所示表示已经连接了“XINEN”的热点 。进到“Wi-Fi”项目后,会看到无线网络清单,我们选取已经建立连接即已经打了勾号的“XINEN”网络进入下一个设置环节。这一步可以看到由 DHCP 动态分配的 IP 地址、子网掩码、路由器和 DNS 等详细信息,而“HTTP 代理”项则处于“关闭”选项卡上。在“HTTP 代理”选项卡上,选择“手动”可以设置代理服务器的 IP 地址和端口号,如我在 MacBook Pro 上通过与 VPS 建立了 SSH TUNNEL 安全隧道的 HTTP 代理器,并且对局域网内开放,我只要写上我的 IP 地址和端口号就可以访问绝大多数海外网站。上次我们讲到进阶,如果采用 Proxy auto-config 则只需指定一个 URL,这个网址其实是一个 JavaScript 写的代理服务器自动配置文件,里面最关键的是 FindProxyForURL 方法(函数),如将 Facebook.com、Google.com、Twitter.com 和 YouTube.com 加进白名单,而其他默认不走代理,则可以自由访问国内国外的网站,不会因为设置了代理服务器导致访问国内的网站时很慢。这个自动方法的方便...
x
MAC/iOS利用FFmpeg解析音视频数据流
利用FFmpeg解析音视频流,音视频流可以来自一个标准的RTMP的URL或者是一个文件. 通过解析得到音视频流,进一步就可以解码, 然后视频渲染在屏幕上,音频通过扬声器输出.
利用FFmpeg框架中libavformat模块可以通过函数 av_read_frame 解析出音视频流的音视频数据,如果直接使用FFmpeg硬解,仅需要解析到AVPacket即可传给解码模块使用,如果使用VideoToolbox中的硬解, 对于视频数据,还需要获取其NALU Header中的(vps)sps, pps以便后续使用.
使用流程
FFmpeg parse流程
下面的链接中包含搭建iOS需要的FFmpeg环境的详细步骤,需要的可以提前阅读.
iOS手动编译并搭建FFmpeg
导入FFmpeg框架后,首先需要将用到FFmpeg的文件改名为.mm, 因为涉及C,C++混编,所以需要更改文件名
然后在头文件中导入FFmpeg头文件.
注意: FFmpeg是一个广为流传的框架,其结构复杂,一般导入都按照如上格式,以文件夹名为根目录进行导入,具体设置,请参考上文链接.
2.1. 注册FFmpeg
一般在程序中的main函数或是主程序启动的代理方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中初始化FFmpeg,执行一次即可.
2.2. 利用视频文件生成格式上下文对象
C++音视频开发学习资料 :点击领取 音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
2.3. 获取Audio / Video流的索引值.
通过遍历format context对象可以从 nb_streams 数组中找到音频或视频流索引,以便后续使用
2.4. 是否支持音视频流
目前视频仅支持H264, H265编码的格式.实际过程中,解码得到视频的旋转角度可能是不同的,以及不同机型可以支持的解码文件格式也是不同的,所以可以用这个方法手动过滤一些不支持的情况.具体请下载代码观看,这里仅列出实战中测试出支持的列表.
音频本例中仅支持AAC格式.其他格式可根据需求自行更改.
使用AVPacket这个结构体来存储压缩数据.对于视频而言, 它通常包含一个压缩帧,对音频而言,可能包含多个压缩帧,该结构体类型通过 av_malloc() 函数分配内存,通过 av_packet_ref() 函数拷贝,通过 av_packet_unref(). 函数释放内存.
解析数据
int av_read_frame(AVFormatContext *s, AVPacket *pkt); : 此函数返回存储在文件中的内容,并且不验证解码器的有效帧是什么。它会将存储在文件中的内容分成帧,并为每次调用返回一个。它不会在有效帧之间省略无效数据,以便为解码器提供解码时可能的最大信息。
获取sps, pps等NALU Header信息
通过调用av_bitstream_filter_filter可以从码流中过滤得到sps, pps等NALU Header信息.
av_bitstream_filter_init: 通过给定的比特流过滤器名词创建并初始化一个比特流过滤器上下文.
av_bitstream_filter_filter: 此函数通过过滤buf参数中的数据,将过滤后的数据放在poutbuf参数中.输出的buffer必须被调用者释放.
此函数使用buf_size大小过滤缓冲区buf,并将过滤后的缓冲区放在poutbuf指向的缓冲区中。
注意: 下面使用new_packet是为了解决av_bitstream_filter_filter会产生内存泄漏的问题.每次使用完后将用new_packet释放即可.
可以根据自己的需求自定义时间戳生成规则.这里使用当前系统时间戳加上数据包中的自带的pts/dts生成了时间戳.
本例将获取到的数据放在自定义的结构体中,然后通过block回调传给方法的调用者,调用者可以在回调函数中处理parse到的视频数据.
获取parse到的音频数据
因为我们已经将packet中的关键数据拷贝到自定义的结构体中,所以使用完后需要释放packet.
parse完成后释放相关资源
C++音视频开发学习资料 :点击领取 音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
注意: 如果使用FFmpeg硬解,则仅仅需要获取到AVPacket数据结构即可.不需要再将数据封装到自定义的结构体中
iOS H264,H265视频编码(Video encode)
H264进行编码,iOS 11 之后,iPhone 7以上的设备可以支持新的编码器H265编码器,使得同等质量视频占用的存储空间更小。所以本例中可以使用两种方式实现视频数据的编码
系统已经提供VTIsHardwareDecodeSupported判断当前设备是否支持H265编码
1 g_isSupportRealTimeEncoder = (is64Bit == 8) ? true : false; 用来判断当前设备是32位还是64位
2 创建H264/H265Session 区别仅仅为参数的不同,h264为kCMVideoCodecType_H264。 h265为kCMVideoCodecType_HEVC,在创建Session指定了回调函数后,当编码成功一帧就会调用相应的回调函数。
3 通过 [self getSupportedPropertyFlags]; 获取当前编码器支持设置的属性,经过测试,H265不支持码率的限制。目前暂时得不到解决。等待苹果后续处理。
4 之后设置编码器相关属性,下面会具体介绍,设置完成后则调用VTCompressionSessionPrepareToEncodeFrames准备编码。
上述方法主要设置启动编码器所需的各个参数
1 kVTCompressionPropertyKey_MaxFrameDelayCount : 压缩器被允许保持的最大帧数在输出一个压缩帧之前。例如如果最大帧延迟数是M,那么在编码帧N返回的调用之前,帧N-M必须被排出。
2 kVTCompressionPropertyKey_ExpectedFrameRate : 设置fps
3 kVTCompressionPropertyKey_AverageBitRate : 它不是强制的限制,bit rate可能会超出峰值
4 kVTCompressionPropertyKey_RealTime : 设置编码器是否实时编码,如果设置为False则不是实时编码,视频效果会更好一点。
5 kVTCompressionPropertyKey_AllowFrameReordering : 是否让帧进行重新排序。为了编码B帧,编码器必须对帧重新排序,这将意味着解码的顺序与显示的顺序不同。将其设置为false以防止帧重新排序。
6 kVTCompressionPropertyKey_ProfileLevel : 指定编码比特流的配置文件和级别
7 kVTCompressionPropertyKey_H264EntropyMode :如果支持h264该属性设置编码器是否应该使用基于CAVLC 还是 CABAC
8 kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration : 两个I帧之间最大持续时间,该属性特别有用当frame rate是可变
以上方法在每采集到一帧视频数据后会调用一次,我们将拿到的每一帧数据进行编码。
1 通过frameID的递增构造时间戳为了使编码后的每一帧数据连续
2 设置最大码率的限制,注意:H265目前不支持设置码率的限制,等待官方后续通知。可以对H264进行码率限制
3 kVTCompressionPropertyKey_DataRateLimits : 将数据的bytes和duration封装到CFMutableArrayRef传给API进行调用
4 VTCompressionSessionEncodeFrame : 调用此方法成功后触发回调函数完成编码。
1 首先在回调函数中截取到I帧,从I帧中提取到(h265中新增vps),sps,pps信息并写入文件
2 遍历其他帧将头信息0000,0001写入每个头信息中,再将该数据写入文件即可
这里我们简单介绍一下H264,H265码流信息
注意在H265流数据中新增vps在最前。
流数据中,属性集合可能是这样的:
经过处理之后,在Format Description中则是:
根据上述得到CMVideoFormatDescriptionRef、CMBlockBufferRef和可选的时间信息,使用CMSampleBufferCreate接口得到CMSampleBuffer数据这个待解码的原始的数据。如下图所示的H264数据转换示意图。
ios虚拟端口IP
这个问题问的比较简单,实现比较简单,为了拓展思路,下面将添加IP、端口相关的知识拓展开说一下:
一、事前知识储备:
(1)普通绑定域名,假设域名为loclalhost
普通默认绑定的是80端口,这样在浏览器地址栏输入localhost就可以访问网站了
(2)绑定端口,域名为localhost,绑定端口为1216
这个在浏览器必须输入localhost:1216才能访问网站
(3)服务器一般用IIS或Apache,JSP有用Tomcat的。
二、IIS绑定域名和端口
A、windows2003+IIS6.0
1、服务器内点击【开始】-【管理工具】-【Internet 信息服务(IIS)管理器】,按照如下图示打开站点属性选项卡
2、在"网站标识"处点击【高级】
3、点击【添加】,之后在弹出的选项卡中的【主机头值】处填写需要绑定的域名即可,填写后点击确定
B、windows2008+IIS7.0
在Windows Server 2008上,IIS添加修改网站域名绑定,可参考如下步骤:
1、登录服务器-开始菜单-管理工具-打开【信息服务(IIS)管理器】。
2、在左侧导航栏点击【网站】,找到要修改的网站,点击右键后选择【编辑绑定】。
如果需要在原有域名的基础上新添加域名绑定,点击【添加】添加新的域名。
如果需要修改原来绑定的域名,选择相应的域名,点击【编辑】,打开之后进行修改。
C、windows2012+IIS7.0
1.打开iis管理器,展开节点,在网站处鼠标右键点击下,选择添加网站。
2。填写网站的信息,包括网站名称,路径,和主机名(域名)的信息,之后点击确定创建下站点即可。
3.创建好的站点可以参考下图,点击下站点,在右侧选择下绑定,之后点击下添加,可以给站点添加绑定下其他的域名。
二、Apache绑定域名和端口
Apache的配置文件一般放置在/etc/httpd/conf文件夹下,httpd.conf是它的主配置文件,在进行配置时可以将虚拟主机的配置文件单独配置,如取名为vhost.conf,然后再http.conf中加入一行包含的语句“Include /etc/httpd/conf/vhost.conf”即可将vhost.conf的配置文件包含进来。
目前在一台服务器上搭建多个网站的方法主要由以下几种:
1、基于IP地址
这种方法适用于一台服务器有多个IP的情况,这种方法最简单粗暴。但一般一个VPS只绑定一个公网IP(额外IP另外加钱),故此方法不过多介绍。
2、基于端口号
这种方法使用不同的端口号来识别不同的网站,实际访问时使用网址加端口号的方式来实现,如localhost:80,localhost:81,localhost:82,该方式配置后需要在网站后加上端口号来访问不同的网站,适用于网站域名短缺但服务器的端口号充足的情况,缺点是网站后需要加上端口号,不利于用户访问
3、基于主机名
这种方法使用不同的域名来区分不同的网站,所有的域名解析都指向同一个IP,Apache通过在HTTP头中附带的host参数来判断用户需要访问哪一个网站,如localhost.com,localhost2,localhost3,多数情况下多个网站架在一台服务器上均使用该方法,下面以CentOS6.5系统为例,说明如何配置基于主机名的Apache虚拟主机。
(一)在Apache的配置文件夹下新建vhost.conf,作为虚拟主机的配置文件,在其中编写虚拟主机的内容,先加入默认的文件头:
NameVirtualHost *:80
ServerName *
#DocumentRoot为默认情况下网站的目录
DocumentRoot /www/html
(二)之后再根据实际情况添加以下的配置:
#在任意的地址上监听80端口上的HTTP请求
#网站管理员的联系方式
ServerAdmin
#网站的目录
DocumentRoot /var/www/html/test3
#主机名,apache就是通过这个地址来识别不同的网站
ServerName localhost
#错误日志路径
ErrorLog logs/localhost-error_log
#访问日志路径
CustomLoglogs/localhost-access_log common
(三)服务器上有多少个网站,那么就分别配置多少份以上信息,并根据实际情况修改其中的内容,测试时服务器上的页面配置
(四)在http.conf文件中加入一行“Include/etc/httpd/conf/vhost.conf”,将vhost.conf文件内容包含进来
(五)在/etc/hosts文件中将网站的域名绑定到本地环回地址上:
127.0.0.1 localhost1
127.0.0.1 localhost2
127.0.0.1 localhost3
(六)最后使用service httpdreload重新加载配置文件或service httpd restart重启Apache进程即可
(七)测试不同的域名返回了不同的网站内容
【iosvps】内容来源于网络,若引用不当、侵权,请联系我们修正或者删除!
版权声明
本文仅代表作者观点,不代表米安网络立场。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。