AVAssetWriter 硬编码bug解决
一、需求
直播助手在录屏过程中,产品要求跟随用户手机屏幕旋转,录屏的视频跟随旋转
二、实施方案
目前触手录,iTools PC端均已经实现该功能,并且该功能只适配iOS9和iOS10系统。猜测实现方案有两种方式:
1、Airplay协议升级,支持在用户旋转之后,系统发送过来的H264数据已经旋转,可能性比较小
2、系统发送过来的H264数据需要解码,然后手动根据屏幕方向,进行旋转。
1方式实施时间较长,暂时按照方案2来实施。2方案中需要感知用户屏幕的方向,注意这里的方向是渲染的朝向而不是重力朝向,渲染方向通过下面的方式获取
三、iOS9 硬编码的bug
iOS上面主要硬编码两种方式,一种VideoToolBox,一种AVAssetWriter;AVAssetWriter要求同一时刻只能存在一个对象在工作,否则在系统的log中可能会出现下面的警告
Sep 7 10:26:11 Administratorde-iPhone kernel[0] <Notice>: AVE: openGated (ID 8000 dev f8 (force f0)) with CL REGISTERED = 4 (clock 1)
Sep 7 10:26:11 Administratorde-iPhone kernel[0] <Notice>: H264SecurityCheck WARNING: m_NumberOfClients reached MAX 4
Sep 7 10:26:11 Administratorde-iPhone kernel[0] <Notice>: AVE WARNING: m_ClientsSecurityCheck->AddClient failed
并且AVAssetWriterInputPixelBufferAdaptor 在追加数据的时候,也会添加失败,导致无法再进行编码。
项目中参照VideoCore的硬编码代码存在缺陷
https://github.com/jgh-/VideoCore-Inactive/blob/master/transforms/iOS/H264Encode.h
该C++类的实现文件中第一个未采用ARC编译方式;第二个AVAssetWriter在指针转换过程中大量使用void*指针,导致AVAssetWriter在C++对象析构之后无法正常释放,产生无法再编码的bug
三、bug修复
将AVAssetWriter void*指针数组改为AVAssetWriter*指针,分成两个对象,让ARC控制对象的释放
AVAssetWriter 硬编码bug解决的更多相关文章
- ExpressionTree——让反射性能向硬编码看齐
缘起 最近又换了工作.然后开心是以后又能比较频繁的关注博客园了.办离职手续的这一个月梳理了下近一年自己写的东西,然后就有了此文以及附带的代码. 反射 关于反射,窃以为,他只是比较慢.在这个前提下,个人 ...
- maven构建项目时硬编码中文乱码问题解决
场景:1. 项目采用maven作为构建工具.2. 前端页面为jsp,由前端团队独立完成,添加编码配置:<%@ page contentType="text/html;charset=u ...
- 密码硬编码(Password Management: Hardcoded Password)
在对项目进行安全扫描时,发现一些密码硬编码问题,本文主要三个方面:1)什么是密码硬编码:2)密码硬编码的危害:3)密码硬编码的解决方案. 一 什么是密码硬编码 将密码以明文的形式直接写到代码中,就是密 ...
- SpringCloud系列二:硬编码实现简单的服务提供者与服务消费者
从本文开始,以一个电影售票系统为例讲解Spring Cloud 1. 版本 jdk:1.8 SpringBoot:2.0.0.RELEASE SpringCloud:Finchley.M8 2. 系统 ...
- Nvidia NVENC 硬编码预研总结
本篇博客记录NVENC硬编码的预研过程 github: https://github.com/MarkRepo/NvencEncoder 步骤如下: (1)环境搭建 (2)demo编译,测试,ARG ...
- 告别硬编码,mysql 如何实现按某字段的不同取值进行统计
上周我突然意识到,我在grafana上写的 sql 语句存在多处硬编码.这篇笔记将记录如何实现没有硬编码的sql语句,以及自学编程过程中如何应对自己的笨拙代码和难题不断的状况. 1.有效但粗笨的硬编码 ...
- Password Management:Hardcoded Password 密码管理:硬编码密码
- Fortify漏洞之Dynamic Code Evaluation: Code Injection(动态脚本注入)和 Password Management: Hardcoded Password(密码硬编码)
继续对Fortify的漏洞进行总结,本篇主要针对 Dynamic Code Evaluation: Code Injection(动态脚本注入) 和 Password Management: Har ...
- 告别硬编码,让你的POI导入导出拥抱变化
GitHub地址 | 博客 | 中文 | English | 原文链接 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择 ...
随机推荐
- javascript实现朴素贝叶斯分类与决策树ID3分类
今年毕业时的毕设是有关大数据及机器学习的题目.因为那个时间已经步入前端的行业自然选择使用JavaScript来实现其中具体的算法.虽然JavaScript不是做大数据处理的最佳语言,相比还没有优势,但 ...
- aspcms多图调用以及错误提示:3704
1.“为师资介绍”(相册列表)建立了内容页(相册内容页), 需要对模板页面改造,在相册详细页调用多图,之前没有试过,这次利用: 实现多图调用,注意不能使用contentid=[content:id] ...
- 23. leetcode 169. Majority Element
169. Majority Element Given an array of size n, find the majority element. The majority element is t ...
- expdp导出文件,ORA-01555: 快照过旧: 回退段号 716
快照号过旧,回退段号过小,信息如下:ORA-31693: 表数据对象 "CZBSDB"."SMS_RESULT_RECORD" 无法加载/卸载并且被跳过, 错误 ...
- 用Python做大批量请求发送
大批量请求发送需要考虑的几个因素: 1. 服务器承载能力(网络带宽/硬件配置); 2. 客户端IO情况, 客户端带宽, 硬件配置; 方案: 1. 方案都是相对的; 2. 因为这里我的情况是客户机只有一 ...
- nopCommerce 3.9 大波浪系列 之 微信公众平台登录插件
一.简介 插件源码下载:点击下载 微信公众平台网站授权帮助地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp142114084 ...
- selenium + ChromeDriver
Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.而对于爬虫来说,使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀 ...
- 解读 Vue 之 Reactive
本文同步发表在 https://github.com/whxaxes/blog/issues/7 前言 在一篇文章中简单讲了 vue 是如何把模板解析成 render function 的,这一篇文章 ...
- 说说最近的项目情况吧(OLCS Part1)
这几天一直在做从04年项目的老代码移植到用portlet spring mvc框架的系统中,由于对业务逻辑的不清楚,代码没有认真的研究,导致各种问题.希望自己长点心吧♥
- Linux内存详解
--Linux内存详解 -----------------2014/05/24 Linux的内存上表现的不像windows那么直观,本文准备详细的介绍一下Linux的内存. 请看这下有linux命令f ...