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

psd设计网站模板出版社网站建设方案

psd设计网站模板,出版社网站建设方案,wordpress模板下载失败,wordpress打开页面慢Android提供了MediaPlayer播放器播放媒体文件#xff0c;其实MediaPlyer只是对Android Media包下的MediaCodec和MediaExtractor进行了包装#xff0c;方便使用。但是最好理解下Android媒体文件的解码#xff0c;编码和渲染流程。 Shape Of My Heart.mp4 source src其实MediaPlyer只是对Android Media包下的MediaCodec和MediaExtractor进行了包装方便使用。但是最好理解下Android媒体文件的解码编码和渲染流程。 Shape Of My Heart.mp4 source srchttp://7xoquj.com1.z0.glb.clouddn.com/shape_of_my_heart.mp4 typevideo/mp4 使用android.media包下的MediaCodec和MediaExtractor实现一个简单的视频解码渲染。 使用到了: MediaCodec:负责媒体文件的编码和解码工作内部方法均为nativeMediaExtractor:负责将指定类型的媒体文件从文件中找到轨道并填充到MediaCodec的缓冲区中AudioTrack:负责将解码之后的音频播放SurfaceView:展示解码之后的视频视频被播放主要分为以下步骤: 将资源加载到extractor获取视频所在轨道设置extractor选中视频所在轨道创将解码视频的MediaCodecdecoder开始循环直到视频资源的末尾将extractor中资源以一个单位填充进decoder的输入缓冲区decoder将解码之后的视频填充到输出缓冲区decoder释放输出缓冲区的同时将缓冲区中数据渲染到surface音频的播放类似只多了AudioTrack部分少了渲染到surface部分。 MediaCodec.releaseOutputBuffer(int outputBufferIndex, boolean render); render为true就会渲染到surface播放的控制视频和音频各自拥有一个Thread。 public void play() {isPlaying true;if (videoThread null) {videoThread new VideoThread();videoThread.start();}if (audioThread null) {audioThread new AudioThread();audioThread.start();}}public void stop() {isPlaying false;} VideoThread private class VideoThread extends Thread {Overridepublic void run() {MediaExtractor videoExtractor new MediaExtractor();MediaCodec videoCodec null;try {videoExtractor.setDataSource(filePath);} catch (IOException e) {e.printStackTrace();}int videoTrackIndex;//获取视频所在轨道videoTrackIndex getMediaTrackIndex(videoExtractor, video/);if (videoTrackIndex 0) {MediaFormat mediaFormat videoExtractor.getTrackFormat(videoTrackIndex);int width mediaFormat.getInteger(MediaFormat.KEY_WIDTH);int height mediaFormat.getInteger(MediaFormat.KEY_HEIGHT);//视频长度:秒float time mediaFormat.getLong(MediaFormat.KEY_DURATION) / 1000000;callBack.videoAspect(width, height, time);videoExtractor.selectTrack(videoTrackIndex);try {videoCodec MediaCodec.createDecoderByType(mediaFormat.getString(MediaFormat.KEY_MIME));videoCodec.configure(mediaFormat, surface, null, 0);} catch (IOException e) {e.printStackTrace();}}if (videoCodec null) {Log.v(TAG, MediaCodec null);return;}videoCodec.start();MediaCodec.BufferInfo videoBufferInfo new MediaCodec.BufferInfo();ByteBuffer[] inputBuffers videoCodec.getInputBuffers(); // ByteBuffer[] outputBuffers videoCodec.getOutputBuffers();boolean isVideoEOS false;long startMs System.currentTimeMillis();while (!Thread.interrupted()) {if (!isPlaying) {continue;}//将资源传递到解码器if (!isVideoEOS) {isVideoEOS putBufferToCoder(videoExtractor, videoCodec, inputBuffers);}int outputBufferIndex videoCodec.dequeueOutputBuffer(videoBufferInfo, TIMEOUT_US);switch (outputBufferIndex) {case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED:Log.v(TAG, format changed);break;case MediaCodec.INFO_TRY_AGAIN_LATER:Log.v(TAG, 解码当前帧超时);break;case MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED://outputBuffers videoCodec.getOutputBuffers();Log.v(TAG, output buffers changed);break;default://直接渲染到Surface时使用不到outputBuffer//ByteBuffer outputBuffer outputBuffers[outputBufferIndex];//延时操作//如果缓冲区里的可展示时间当前视频播放的进度就休眠一下sleepRender(videoBufferInfo, startMs);//渲染videoCodec.releaseOutputBuffer(outputBufferIndex, true);break;}if ((videoBufferInfo.flags MediaCodec.BUFFER_FLAG_END_OF_STREAM) ! 0) {Log.v(TAG, buffer stream end);break;}}//end whilevideoCodec.stop();videoCodec.release();videoExtractor.release();}} 获取指定类型媒体文件所在轨道 //获取指定类型媒体文件所在轨道private int getMediaTrackIndex(MediaExtractor videoExtractor, String MEDIA_TYPE) {int trackIndex -1;for (int i 0; i videoExtractor.getTrackCount(); i) {//获取视频所在轨道MediaFormat mediaFormat videoExtractor.getTrackFormat(i);String mime mediaFormat.getString(MediaFormat.KEY_MIME);if (mime.startsWith(MEDIA_TYPE)) {trackIndex i;break;}}return trackIndex;} 将缓冲区传递至解码器 //将缓冲区传递至解码器private boolean putBufferToCoder(MediaExtractor extractor, MediaCodec decoder, ByteBuffer[] inputBuffers) {boolean isMediaEOS false;int inputBufferIndex decoder.dequeueInputBuffer(TIMEOUT_US);if (inputBufferIndex 0) {ByteBuffer inputBuffer inputBuffers[inputBufferIndex];int sampleSize extractor.readSampleData(inputBuffer, 0);if (sampleSize 0) {decoder.queueInputBuffer(inputBufferIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);isMediaEOS true;Log.v(TAG, media eos);} else {decoder.queueInputBuffer(inputBufferIndex, 0, sampleSize, extractor.getSampleTime(), 0);extractor.advance();}}return isMediaEOS;} 音频的部分类似完整源码请移步jiyangg/MediaPlaySimpleDemo 转载于:https://www.cnblogs.com/jiy-for-you/p/7282033.html
http://wiki.neutronadmin.com/news/294788/

相关文章:

  • html5网站编写软件开发模型包括
  • 网站建设费账务处理推广策略是什么意思
  • 汕头网站建设培训公司衣服货源怎么找厂家拿
  • 软件定制开发公司排名seo诊断优化方案
  • 做那个网站的图客比较好电商网站的银行支付接入该怎么做
  • 建设网站需要哪些职位做爰视频免费的网站
  • 网站服务器 购买时长云南建设工程有限公司
  • 北京一度网站建设建设淘宝联盟购物网站
  • 网站的邀请怎么做的宿州网站建设报价
  • 网站建设实施步骤企业仓库管理系统
  • 沈阳沈河seo网站排名优化网页制作与设计素材
  • 如何在服务器上关闭网站上海专建贸易有限公司
  • 土石方工程网站手机网站制作机构
  • 局域网视频网站搭建视频网站开发报告
  • 群晖建立wordpress网站的优化是什么意思
  • 做网站的为什么那么多骗子网络货运怎么做的
  • 做网站的行情佛山市门户网站建设公司
  • 给网站开发一个计算器功能建设公众号网站
  • 重庆金融网站建设九江有哪些免费推广网站
  • 网站域名管理梵客家装电话
  • gis网站开发实战教程做棋牌辅助网站
  • 百度站内搜索望城做网站
  • 绿色主色调网站乔拓云建站平台
  • 中海外交通建设有限公司网站wordpress博客主题推荐
  • 网站建设与制作设计公司wordpress百度索引
  • 企业网站可以做商城类微信小程序制作软件哪个好
  • xss网站怎么搭建学产品设计的可以找什么工作
  • discuz 企业网站0货源怎么开网店
  • 秦皇岛网站制作公司公司网站空间要多大
  • 网站建设相关论文电商网站代码模板