必威体育Betway必威体育官网
当前位置:首页 > IT技术

Android Tunnel Mode

时间:2019-06-12 10:44:13来源:IT技术作者:seo实验室小编阅读:59次「手机版」
 

tunnel

在最新的Android版本上(AndroidO)为了降低播放4K60FPS片源对整机性能的过度消耗,Android出现了一种新的视频播放模式tunnel Mode。

下面是关键的几步适配Tunnel Mode的方式:

1.需要Audio sessionID,这个是由Audio Manager生成的

audiOSessionId = ((AudioManager)ctx.getSystemService(context.AUDIO_SERVICE)).generateAudioSessionId();

2.配置docoder尾tunnel mode模式

format.setFeatureEnabled(MediaCodecInfo.CodecCapabilities.FEATURE_TunneledPlayback, true);

3.通过audio sessionid来配置video decoder

format.setinteger(android.media.MediaFormat.KEY_AUDIO_SESSION_ID, audioSessionId);

4.通过SessionId创建auditrack,同时设置FLAG_HW_AV_SYNC flag让底层知道需要硬件同步

AudioAttributes attr = new AudioAttributes.builder()
 .setLegacyStreamType(AudioManager.STREAM_MUSIC)
 .setFlags(AudioAttributes.FLAG_HW_AV_SYNC)
 .build();
AudioFormat fmt = new AudioFormat.Builder()
 .setEncoding(targetEncoding)
 .setSampleRate(sampleRate)
 .setChannelMask(channelConfig)
 .build();
AudioTrack audioTrack = new android.media.AudioTrack(attr, fmt, bufferSize, 575 android.media.AudioTrack.MODE_STREAM, audioSessionId);

5.video decoder不需要调用dequeueOutputBuffer和releaseOutPutBuffer

6.需要在音频写入audiotrack的时候在头部插入一个16 byte的avsync header

private ByteBuffer avSyncHeader = null;
avSyncHeader = ByteBuffer.allocate(16);
avSyncHeader.order(ByteOrder.BIG_ENDIAN);
avSyncHeader.position(0);
avSyncHeader.order(ByteOrder.BIG_ENDIAN);
avSyncHeader.putInt(AVSYNC_START_CODE);
avSyncHeader.putInt(bufferBytesRemaining);
avSyncHeader.putLong(presentationTimeUs * 1000 );
avSyncHeader.position(0);

这个header包含一个起始码,pts(nano sec),和数据的size。再写入audio数据前先写入这个header data。

具体调试中还会有一些坑,这个得调试的过程中才能一一分析解决。

相关阅读

XX-Net使用教程之X-Tunnel

最近在一台新电脑上面装XX-Net,刚开始扫描IP贼慢,当时没多在意,今天在github上面突然发现XX-Net新增了一条日志: 2017-09-228月份开

关于VB里的ScaleMode问题

我是一个VB初学者,最近苦恼于VB的窗体和控件的ScaleMode问题,VB里默认的ScaleMode是twip,而往往我们希望它是pixel,虽然在属性面板里

Model、ModelMap和ModelAndView的使用详解

1.前言 最近SSM框架开发web项目,用得比较火热。spring-MVC肯定用过,在请求处理方法可出现和返回的参数类型中,最重要就是Model和Mod

ipad提示exit safe mode是什么原因该如何解决

ipad exit safe mode怎么解决?小编带来了ipad exit safe mode解决方法,有果粉在使用iPad时会突然提示“exit safe mode&rdquo

配置路由ADSL Modem的详细步骤

第一步:连接好ADSL线路,将计算机“本地连接”的“IP地址”和“DNS服务器地址”设为“自动获取

分享到:

栏目导航

推荐阅读

热门阅读