当前位置: 首页 > news >正文

wordpress 网站统计凡客官方网站

wordpress 网站统计,凡客官方网站,英文网站模板制作,wordpress装修模板制作基于AVCodec能力的视频编解码 介绍 本实例基于AVCodec能力,提供基于视频编解码的视频播放和录制的功能。 视频播放的主要流程是将视频文件通过解封装->解码->送显/播放。视频录制的主要流程是相机采集->编码->封装成mp4文件。 播放支持的原子能力规…

基于AVCodec能力的视频编解码

介绍

本实例基于AVCodec能力,提供基于视频编解码的视频播放和录制的功能。

  • 视频播放的主要流程是将视频文件通过解封装->解码->送显/播放。
  • 视频录制的主要流程是相机采集->编码->封装成mp4文件。

播放支持的原子能力规格

媒体格式封装格式码流格式
视频mp4视频码流:H.264/H.265, 音频码流:AudioVivid
视频mkv视频码流:H.264/H.265, 音频码流:aac/mp3/opus
视频mpeg-ts视频码流:H.264, 音频码流:AudioVivid

录制支持的原子能力规格

封装格式视频编解码类型
mp4H.264/H.265
m4aAVC(H.264)

注意,本示例仅支持视频录制,未集成音频能力

效果预览

1

使用说明

  1. 弹出是否允许“AVCodecVideo”使用相机?点击“允许”
录制
  1. 点击“录制”
  2. 选取视频输出路径,默认为【我的手机】文件夹下
  3. 录制完成后点击“停止录制”
播放
  1. 推送视频文件至storage/media/100/local/files/Docs下或点击下方“开始录制”,录制一个视频文件(无音频)
  2. 点击播放按钮,选择文件,开始播放

具体实现

录制
UI层
  1. 在UI层Index页面,用户点击“录制”后,会调起文件管理,用户选择一个输出地址。录制结束后,文件会存放于此。
  2. 选择好文件后,会用刚刚打开的fd,和用户预设的录制参数,掉起ArkTS的initNative,待初始化结束后,调用OH_NativeWindow_GetSurfaceId接口,得到NativeWindow的surfaceId,并把surfaceId回调回UI层。
  3. UI层拿到编码器给的surfaceId后,调起页面路由,携带该surfaceId,跳转到Recorder页面;
  4. 录制页面XComponent构建时,会调起.onLoad()方法,此方法首先会拿到XComponent的surfaceId,然后调起createDualChannelPreview(),此函数会建立一个相机生产,XComponent和编码器的surface消费的生产消费模型。
Native层
  1. 进入录制界面后,编码器启动,开始对UI层相机预览流进行编码。
  2. 编码器每编码成功一帧,sample_callback.cpp的输出回调OnNewOutputBuffer()就会调起一次,此时用户会拿到AVCodec框架给出的OH_AVBuffer;
  3. 在输出回调中,用户需手动把帧buffer、index存入输出队列中,并通知输出线程解锁;
  4. 在输出线程中,把上一步的帧信息储存为bufferInfo后,pop出队;
  5. 在输出线程中,使用上一步的bufferInfo,调用封装接口WriteSample后,这一帧被封装入MP4中;
  6. 最后调用FreeOutputBuffer接口后,这一帧buffer释放回AVCodec框架,实现buffer轮转。
播放
UI层
  1. 在UI层Index页面,用户点击播放按钮后,触发点击事件,调起selectFile()函数,该函数会调起文件管理的选择文件模块,拿到用户选取文件的路径;
  2. 用户选择文件成功后,调起play()函数,该函数会根据上一步获取到的路径,打开一个文件,并获取到该文件的大小,改变按钮状态为不可用,之后调起ArkTS层暴露给应用层的playNative()接口;
  3. 根据playNative字段,调起PlayerNative::Play()函数,此处会注册播放结束的回调。
  4. 播放结束时,Callback()中napi_call_function()接口调起,通知应用层,恢复按钮状态为可用。
ArkTS层
  1. 在PlayerNative.cpp的Init()中调用PluginManager()中的Export()方法,注册OnSurfaceCreatedCB()回调,当屏幕上出现新的XComponent时,将其转换并赋给单例类PluginManager中的pluginWindow_;
Native层
  1. 具体实现原理:

    • 解码器Start后,解码器每拿到一帧,OnNeedInputBuffer就会被调起一次,AVCodec框架会给用户一个OH_AVBuffer。
    • 在输入回调中,用户需手动把帧buffer、index存入输入队列中,并同时输入线程解锁。
    • 在输入线程中,把上一步的帧信息储存为bufferInfo后,pop出队。
    • 在输入线程中,使用上一步的bufferInfo,调用ReadSample接口解封装帧数据。
    • 在输入线程中,使用解封装后的bufferInfo,调用解码的PushInputData接口,此时这片buffer用完,返回框架,实现buffer轮转。
    • PushInputData后,这一帧开始解码,每解码完成一帧,输出回调会被调起一次,用户需手动把帧buffer、index存入输出队列中。
    • 在输出线程中,把上一步的帧信息储存为bufferInfo后,pop出队。
    • 在输出线程中,调用FreeOutputData接口后,就会送显并释放buffer。释放的buffer会返回框架,实现buffer轮转。
  2. 解码器config阶段,OH_VideoDecoder_SetSurface接口的入参OHNativeWindow*,即为PluginManager中的pluginWindow_。

  3. 解码器config阶段,SetCallback接口,sample_callback.cpp的输入输出回调需将回调上来的帧buffer和index存入一个用户自定义容器sample_info.h中,方便后续操作。

  4. Player.cpp的Start()起两个专门用于输入和输出的线程。

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

在这里插入图片描述

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!

http://www.hyszgw.com/news/31624.html

相关文章:

  • 网站开发公司赚钱吗济南可信网站
  • 漳州网站建设优化推广凡科建站网站建设
  • 网站开发图片编辑网上购物平台哪家质量最好
  • 有没有教做蛋糕的网站哈尔滨做网站设计
  • 网站你懂我意思正能量晚上惠州行业网站设计方案
  • 北海网站建设苏州网站排名
  • 网站建设 图纸网中国互联网协会先后制定并发布了
  • 网站开发与设计英文书籍可信赖的网站建设公司
  • 河北网站建设联系方式建设部网站官网四库一平台
  • 广州专业的网站建设公司排名wordpress导出表
  • 做移动网站快速可以制作h5的网站
  • 溧阳城乡建设厅网站网站设计和内容上的不足和建议
  • 做网站服务器配置应该怎么选在线优化网站建设
  • 创新网站建设论文网站开发计入无形资产吗
  • 工会门户网站建设需求电商营销
  • 2014 网站建设微信公众号推广网站
  • 网站开发设计公司广州注册个体户流程及费用
  • 官方网站建设平台网站地图做关键词排名
  • 济南手机网站定制费用聚合广告联盟
  • 做网站域名还重要吗什么是网站网页主页
  • 沭阳网站建设加盟凡科建站
  • 网站建设报价请示做lgoo的网站一般有哪些
  • 西二旗网站建设建立网站时什么可以使用中文
  • 河南建设工程造价管理协会网站软件开发技术流程图
  • 怎样在微信中做网站微信能否做门户网站
  • 站长之家域名查询公司网站如何建设教学视频
  • torrent种子搜索引擎seo入门课程
  • 360上网安全导航宁波正规优化seo公司
  • 网站开发运营维护方案建议装修照片
  • 基于django的电子商务网站设计西安优化排名推广