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

好康的网站代码django网站开发实例

好康的网站代码,django网站开发实例,定制和订制有什么区别,运城做网站要多少钱文章目录 前言视频采集视频编码视频编码写入结语 本文首发地址 https://blog.csdn.net/CSqingchen/article/details/134896821 最新更新地址 https://gitee.com/chenjim/chenjimblog 前言 通过 文2 我们知道了 MediaRecorder 各个接口 Framework 中的实现。 通过 文3 我们 知道… 文章目录 前言视频采集视频编码视频编码写入结语 本文首发地址 https://blog.csdn.net/CSqingchen/article/details/134896821 最新更新地址 https://gitee.com/chenjim/chenjimblog 前言 通过 文2 我们知道了 MediaRecorder 各个接口 Framework 中的实现。 通过 文3 我们 知道了 MediaRecorder 底层音频的采集、编码、写入文件等详细流程。 本文主要介绍 MediaRecorder 视频的采集、编码等相关流程。 视频采集 在 文1 我们知道了如何使用 MediaRecorder 录制音频那么如何同时录制声音和视频呢可以参见 Demo Camera2Video这里不再贴代码。 通过此示例我们知道录制视频需要如下设置 val surface MediaCodec.createPersistentInputSurface() ... setOutputFormat(MediaRecorder.OutputFormat.MPEG_4) setVideoSource(MediaRecorder.VideoSource.SURFACE) setVideoEncoder(videoEncoder) setInputSurface(surface)也就是视频采集源就是这个 surface MediaCodec.createPersistentInputSurface()。 也就是 mInputSurface也是 PreviewFragment 中 encoderSurface最终传递到 eglEncoderSurface eglEncoderSurface EGL14.eglCreateWindowSurface(eglDisplay, eglConfig, encoderSurface, surfaceAttribs, 0) 在 HardwarePipeline中可以看到添加了一路预览流 // 创建一个 GL_TEXTURE_EXTERNAL_OES 纹理cameraTexId createTexture()cameraTexture SurfaceTexture(cameraTexId)...session.device.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).apply {// 添加预览 surface targetaddTarget(cameraSurface)}.build()基于 cameraTexture.setOnFrameAvailableListener(this), 当预览流可用时会进行如下消费、复制操作 private fun onFrameAvailableImpl(surfaceTexture: SurfaceTexture) {if (eglContext EGL14.EGL_NO_CONTEXT) {return}/* 消费掉camera出来的流 updateTexImage 相关介绍可以参考 https://blog.csdn.net/CSqingchen/article/details/135637088 */cameraTexture.updateTexImage()/** 复制 cameraTexture 到 eglRenderSurface */if (eglRenderSurface ! EGL_NO_SURFACE) {copyCameraToRender()}/** 复制 eglRenderSurface 到 TextureView 显示*/copyRenderToPreview()/** 复制 eglRenderSurface 到 eglEncoderSurface 通过消息 encoder.frameAvailable() 告知编码*/if (eglEncoderSurface ! EGL_NO_SURFACE currentlyRecording) {copyRenderToEncode()} }至此我们知道了 MediaRecorder 采集视频的数据流。 这里是基于 Demo Camera2Video 分析其它情况也差不多。 视频编码 在示例 Camera2Video 中如果 useMediaRecorder 为 false编码相关代码如下 public fun drainEncoder(): Boolean {while (true) {// 编码 var encoderStatus: Int mEncoder.dequeueOutputBuffer(mBufferInfo, TIMEOUT_USEC)...// 取编码的数据var encodedData: ByteBuffer? mEncoder.getOutputBuffer(encoderStatus)...//写入编码后数据到文件mMuxer.writeSampleData(mVideoTrack, encodedData, mBufferInfo)} }完整代码参见 EncoderWrapper.kt 如果 useMediaRecorder 为 true 编码及写入均在Framework我们可以从 setInputSurface 往下底层查看。 通过 文2 ,setInputSurface的最终实现如下 status_t StagefrightRecorder::setInputSurface(const spPersistentSurface surface) {mPersistentSurface surface;return OK; }编码器初始化创建如下 status_t StagefrightRecorder::setupVideoEncoder(const spMediaSource cameraSource,spMediaCodecSource *source){...spMediaCodecSource encoder MediaCodecSource::Create(mLooper, format, cameraSource, mPersistentSurface, flags);... } status_t MediaCodecSource::initEncoder() {...if (mPersistentSurface ! NULL) {err mEncoder-setInputSurface(mPersistentSurface);}... } status_t MediaCodec::setInputSurface(const spPersistentSurface surface) {spAMessage msg new AMessage(kWhatSetInputSurface, this);msg-setObject(input-surface, surface.get());spAMessage response;return PostAndAwaitResponse(msg, response); }通过如下代码将 Camera 数据源设置为编码 status_t StagefrightRecorder::setupCameraSource(spCameraSource *cameraSource) {if (mCaptureFpsEnable) {*cameraSource CameraSource::CreateFromCamera(mCamera, mCameraProxy, mCameraId, clientName, uid, pid,videoSize, mFrameRate,mPreviewSurface);} } ... setupVideoEncoder(mediaSource, encoder);视频编码写入 视频的编码写入流程同 文3 音频的编码、写入。 结语 到这里通过相关文章的介绍我们已经很清晰 MediaRecorder 底层的音、视频采集、编码、写入编码后内容等相关流程的源码实现。 希望对你有所帮助。如果你在使用 MediaRecorder 的过程中遇到了其他问题欢迎留言讨论。 如果你觉得本文还不错可以点赞收藏。 相关文章 安卓MediaRecorder(1)录制音频的详细使用 安卓MediaRecorder(2)录制源码分析 安卓MediaRecorder(3)音频采集编码写入源码分析 安卓MediaRecorder(4)视频采集编码写入源码分析
http://www.zqtcl.cn/news/755828/

相关文章:

  • 珠海网站制作案例tp5 商城网站开发
  • 母婴用品网站建设规划上海市建设工程 安全协会网站
  • 做室内设计特别好的网站网站服务器租用恒创
  • 慕课网站开发文档wordpress上传到空间
  • 行业垂直网站开发漳州最便宜的网站建设价格
  • 高级网站设计效果图网站设计制作哪些
  • 惠山区住房和建设厅网站营销推广方式都有哪些
  • 做网贷网站多少钱wordpress首页短代码
  • 网站网格湖南网页
  • 做网站的知名品牌公司用ps切片做网站
  • 中学网站模板下载番禺外贸网站建设
  • 常州网站seo代理加盟郑州浩方网站建设智联招聘
  • 小型网站制作网站开发做什么费用
  • seo网站论文社交app开发公司
  • 企业宣传网站建设图示《高性能网站建设》
  • 福州志愿者官方网站怎么做erp管理系统介绍
  • 高端网站建设费用情况广州开发区控股集团有限公司
  • 精湛的网站设计云南网招聘
  • 南昌网站建设公司行情Wordpress添加分页按钮
  • 论坛网站建设流程wordpress速度优化插件
  • PHP套模板做网站建设银行保定分行网站
  • 怎样免费注册网站域名wordpress网站回调域
  • 东莞个人免费建网站乐清网约车事件
  • 备案查询网站网站的登录弹窗怎么做
  • 网站开发 mvc北京建设工程主管部门网站
  • 淮安建设机械网站制作代理公司注册需要多少钱
  • 站长收录茌平建设局网站
  • 如何进行网站开发开发区人才
  • 网站制作 视频网站维护的主要内容包括
  • 快速企业建站深圳网站关键词优化推广