一、需求

  直播助手在录屏过程中,产品要求跟随用户手机屏幕旋转,录屏的视频跟随旋转

二、实施方案

  目前触手录,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解决的更多相关文章

  1. ExpressionTree——让反射性能向硬编码看齐

    缘起 最近又换了工作.然后开心是以后又能比较频繁的关注博客园了.办离职手续的这一个月梳理了下近一年自己写的东西,然后就有了此文以及附带的代码. 反射 关于反射,窃以为,他只是比较慢.在这个前提下,个人 ...

  2. maven构建项目时硬编码中文乱码问题解决

    场景:1. 项目采用maven作为构建工具.2. 前端页面为jsp,由前端团队独立完成,添加编码配置:<%@ page contentType="text/html;charset=u ...

  3. 密码硬编码(Password Management: Hardcoded Password)

    在对项目进行安全扫描时,发现一些密码硬编码问题,本文主要三个方面:1)什么是密码硬编码:2)密码硬编码的危害:3)密码硬编码的解决方案. 一 什么是密码硬编码 将密码以明文的形式直接写到代码中,就是密 ...

  4. SpringCloud系列二:硬编码实现简单的服务提供者与服务消费者

    从本文开始,以一个电影售票系统为例讲解Spring Cloud 1. 版本 jdk:1.8 SpringBoot:2.0.0.RELEASE SpringCloud:Finchley.M8 2. 系统 ...

  5. Nvidia NVENC 硬编码预研总结

    本篇博客记录NVENC硬编码的预研过程 github:  https://github.com/MarkRepo/NvencEncoder 步骤如下: (1)环境搭建 (2)demo编译,测试,ARG ...

  6. 告别硬编码,mysql 如何实现按某字段的不同取值进行统计

    上周我突然意识到,我在grafana上写的 sql 语句存在多处硬编码.这篇笔记将记录如何实现没有硬编码的sql语句,以及自学编程过程中如何应对自己的笨拙代码和难题不断的状况. 1.有效但粗笨的硬编码 ...

  7. Password Management:Hardcoded Password 密码管理:硬编码密码

  8. Fortify漏洞之Dynamic Code Evaluation: Code Injection(动态脚本注入)和 Password Management: Hardcoded Password(密码硬编码)

    继续对Fortify的漏洞进行总结,本篇主要针对  Dynamic Code Evaluation: Code Injection(动态脚本注入) 和 Password Management: Har ...

  9. 告别硬编码,让你的POI导入导出拥抱变化

    GitHub地址 | 博客 | 中文 | English | 原文链接 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择 ...

随机推荐

  1. javascript实现朴素贝叶斯分类与决策树ID3分类

    今年毕业时的毕设是有关大数据及机器学习的题目.因为那个时间已经步入前端的行业自然选择使用JavaScript来实现其中具体的算法.虽然JavaScript不是做大数据处理的最佳语言,相比还没有优势,但 ...

  2. aspcms多图调用以及错误提示:3704

    1.“为师资介绍”(相册列表)建立了内容页(相册内容页), 需要对模板页面改造,在相册详细页调用多图,之前没有试过,这次利用: 实现多图调用,注意不能使用contentid=[content:id]  ...

  3. 23. leetcode 169. Majority Element

    169. Majority Element Given an array of size n, find the majority element. The majority element is t ...

  4. expdp导出文件,ORA-01555: 快照过旧: 回退段号 716

    快照号过旧,回退段号过小,信息如下:ORA-31693: 表数据对象 "CZBSDB"."SMS_RESULT_RECORD" 无法加载/卸载并且被跳过, 错误 ...

  5. 用Python做大批量请求发送

    大批量请求发送需要考虑的几个因素: 1. 服务器承载能力(网络带宽/硬件配置); 2. 客户端IO情况, 客户端带宽, 硬件配置; 方案: 1. 方案都是相对的; 2. 因为这里我的情况是客户机只有一 ...

  6. nopCommerce 3.9 大波浪系列 之 微信公众平台登录插件

    一.简介 插件源码下载:点击下载 微信公众平台网站授权帮助地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp142114084 ...

  7. selenium + ChromeDriver

    Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.而对于爬虫来说,使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀 ...

  8. 解读 Vue 之 Reactive

    本文同步发表在 https://github.com/whxaxes/blog/issues/7 前言 在一篇文章中简单讲了 vue 是如何把模板解析成 render function 的,这一篇文章 ...

  9. 说说最近的项目情况吧(OLCS Part1)

    这几天一直在做从04年项目的老代码移植到用portlet spring mvc框架的系统中,由于对业务逻辑的不清楚,代码没有认真的研究,导致各种问题.希望自己长点心吧♥

  10. Linux内存详解

    --Linux内存详解 -----------------2014/05/24 Linux的内存上表现的不像windows那么直观,本文准备详细的介绍一下Linux的内存. 请看这下有linux命令f ...