Android MP4边下边播

版权声明:本文为博主原创文章,可以随意转载,但是必须在开头标明出处。 https://blog.csdn.net/qq_29951983/article/details/79379489

视频:

视频播放形式

  1. 使用网络url播放视频
    使用网络url播放视频分为两种情况:
    A:流视频:对流形式的视频而言,Android原生的Mediaplayer等播放控件可以实现在线播放功能。
    B:非流视频:需要把视频下载到本地,再进行播放,但是这里有个缺陷,不能实现边播边下。
  2. 使用本地url播放视频:直接在MediaPlayer或者VideoView放置一个url即可。

    参考链接

视频格式的组成

简要地说,MP4文件主要由ftyp,mdat,moov这三部分组成。

  • ftyp 记录了mp4格式,编码格式之类的一些基本信息
  • mdat记录了视频媒体信息(mdat的体积往往非常的大,几乎等于MP4总大小)
  • moov是如同检索表一样的存在,里面记录了每一帧对应的数据在哪里等等

    如果moov比较大,播放器需要较多的时间去解析,所以在播放之前可能会出现较长的缓冲时间,特别是视频文件较大的情况下,所以现在有些点播网站会采用每段mdat都有自己独立的metadata的封装方式,这样就可实现渐进式下载和快速缓冲的效果。

视频工作过程

  • 读取ftype部分决定解码方式。
  • 寻找并读取moov部分,获取视频总时长等信息。
  • 根据moov的检索信息到mdat里面读取相应的媒体信息,进而播放。

参考连接

视频处理

FFmpeg

FFmpeg的是一个自由软件,可以运行音频和视频多种格式的录影,转换,流功能,包含了libavcodec–这是一个用于多个项目中音频和视频的解码器库,以及libavformat- - 一个音频与视频格式转换库。

维基百科

将moov移动到mdat前面

  • qt-faststart.exe 原视频文件路径 生成的视频文件路径

如果上面这句话抛出last atom in file was not a moov atom的异常错误

则使用

  • d:\ffmpeg.exe -i 原视频文件路径 -acodec copy -vcodec copy 生成的视频文件路径

然后在执行第一句话即可

播放框架

github

https://github.com/danikula/AndroidVideoCache

原理

这里写图片描述
如果想知道源码,可以看我的另一篇文章,对源码进行了讲解。开源视频播放框架学习——AndroidVideoCache

总结一下

使用AndroidVideoCache框架播放,如果想像爱奇艺、优酷那样,下载完一半的视频,我断网之后还能播放,就需要把moov数据放置到mdat前面。
你还可以对这个框架进行优化。优化方案

在视频播放中遇到的问题

我有一个视频在Android5.1播放很流畅,但是放在了Android4.4.2上面就变得很卡,甚至播放了一半,就无法继续播放了,后来发现是视频的编解码的问题。
developer.android.com
我视频编解码是H.264 AVC Main Profile (MP),这个在高版本的Android设备上播放是没有问题的,但是在低版本的设备上播放就会出现我上面说的那种问题。这时候需要转换成为H.264 AVC Baseline Profile (BP)编解码。
我使用的转换工具是——魔影工厂

微信公众号:
这里写图片描述

QQ群:365473065

猜你喜欢

转载自blog.csdn.net/qq_29951983/article/details/79379489
今日推荐