Android RTSP/RTMP多路播放时动态切换输出View类型(SurfaceView和TextureView 动态切换)

  SurfaceView和TextureView的区别和优缺点等, 相关的资料很多. 从Android低延时播放器实现角度来看, 总结了下主要区别有:

  1. MediaCodec输出到SurfaceView延时一般比到TextureView更低.

  2. MediaCodec用SurfaceView比TextureView占用的资源一般更少些(CPU和内存都小一些, 不过还是有Android设备SurfaceView表现更差些).

  3. MediaCodec输出到TextureView上的画面做缩放、旋转等变换时很方便,如果调用TextureView.getBitmap()成功的话,也可以将视频画面保存为jpeg图片(抓图方便).

  4. SurfaceView和TextureView 清屏方式不一样.

  5. SufraceView从自绘切到MediaCodec输出的处理方式和TextureView不一样(直接切换MediaCodec会报错)。

  另外不使用MediaCodec直接输出到Surface上, 或用其他decoder,就需要yuv转rgb后再输出到SurfaceView或TextureView上.

 播放器的实现,上面列出来的这些需要注意,具体代码实现过程中,细节问题也不少,遇到再处理.

  监控场景下, 9宫格16宫格或者更多路同时播放,点击一路画面全屏或者放大观看,小宫格可以用SurfaceView输出(占用资源少), 点击小宫格画面放大看时可以动态切到TextureView上显示,这样实现局部画面缩放,抓图都方便。

  为方便集成调用,我的播放器对外提供一个设置和切换Surface的接口: 

/*
* Copyright (C) 1130758427@qq.com. All rights reserved. 
* 问题沟通微信:ldxevt
*/

public class SmartPlayerJniV2 {

  // .......其他接口

  // 设置或者播放时动态切换Surface接口
  public native int SetSurface(long handle, android.view.Surface surface,
							   int surface_codec_media_color_format,
                               int disable_codec_render_surface,
                               int disable_sdk_render_surface);

  // ........其他接口

}

    测试时先创建了一个TextureView, 然后在TextureView上有叠了一个小的SurfaceView, 播放时点击按钮来回切换View。

    MediaCodec+TextureView:

  点击:"切换到SURFACEVIEW"按钮,切到MediaCodec+SurfaceView:

  软解也可以动态切View,上面展示的是单路播放切换View的例子, 多路播放或其他问题请联系qq: 1130758427, 微信:ldxevt 。
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值