Android 播放本地 ts 格式视频

Android 播放本地 ts 格式视频

上一篇文件讲述了如何录制 ts 格式的视频,那么如何播放录好的 ts 格式视频呢。

我一开始使用 MediaPlayer + SurfaceView 组合实现,我在代码中加了一个 mp4 格式的过滤,导致我播放时没有播放成功,误以为 MediaPlayer 不支持 ts 格式视频,看许多文档说明,也都是说 MediaPlayer 支持的格式为 mp4,3gp,mkv,webm,让我更确信了这点。

搜索 Google 文档,官方文档说 ExoPlayer 这个播放器功能强大,什么都支持,于是我就去研究这个开源播放器了。不过给大家一个很不错的链接,学习这篇文章基本就足够了。
【https://www.iambigboss.top/post/37754_1_1.html】,默认可以播放本地的 ts 格式视频,但是 1920 x 1080 的却播放不了,后来发现,在创建 MediaSource 时,需要设置 TS 的 Flags,基本如下:

DefaultExtractorsFactory defaultExtractorsFactory = new DefaultExtractorsFactory();
                defaultExtractorsFactory.setTsExtractorFlags(FLAG_DETECT_ACCESS_UNITS | FLAG_ALLOW_NON_IDR_KEYFRAMES);
                return new ExtractorMediaSource.Factory(dataSourceFactory).setExtractorsFactory(defaultExtractorsFactory).createMediaSource(uri);

我测试的时候,发现 FLAG_DETECT_ACCESS_UNITS 这个 flags 对我有效的,github 的 issue 中,有人指出 FLAG_ALLOW_NON_IDR_KEYFRAMES 这个有效。

但是这个也有点问题,播放我的 ts 视频时,它的进度条那里有问题,读不出一些参数,导致进度条无法拖拽控制,无法快进和快退。

后来我尝试了一下 VideoView 这个控件,这个控件也是可以播放 ts 格式视频的,可以使用官方的 MediaController 作为菜单栏控制,也可以自己写一个菜单栏控制,然而我发现 VideoView 内部也是 MediaPlayer 实现的,我仔细读了读我之前的视频播放代码,发现了 mp4 文件过滤的这个问题,去掉之后,发现 MediaPlayer 也是可以播放 ts 格式的,视频的播放时长也可以获取到,可以自定义一个 SeekBar 实现拖拽播放。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值