Android将多个视频文件拼接为一个文件
来源:互联网 发布:女排比赛直播软件 编辑:程序博客网 时间:2024/06/15 20:42
正文
利用android的2个类MediaExtractor(抽取音/视频帧) + MediaMuxer
(将音视频重新写入一个多媒体文件,完成封装)。
合成文件为MP4。为啥是MP4? 因为android支持最好的就是这个格式。MediaMuxer的native实现者是MPEG4Writer。
合成mp4视频主要有三个步骤:
1. 开始时,创建MediaMuxer,写入文件头部ftyp;
2. 进行时,遍历文件,读取每一帧,实时写入新文件的数据块mdat,并在内存中存储trak表。到下一个文件时,pts offset增加;
3. 所有文件都读取完,结束,索引信息trak表写入moov。关闭文件描述符。
话不多说,直接给github的demo代码:
https://github.com/xf420811/VideoComposerDemo
关于视频合成的一些问题
1. 前后2个视频的video fps不一样,有关系吗?
没有关系。底层decoder不会因为fps有变化,就不解码。做render的时候,是根据pts做显示,不会用fps。(fps一般用于pts没有,或者出错时,decoder根据fps重新计算pts,送给render。)
2. 前后2个视频的video codec不一样,有关系吗?
有关系。底层decoder会根据不同的codec建立真正的decoder实例,如AVCDecoder, HEVCDecoder,到解码完成前,这个无法实时切换。
3. 前后2个视频的video 分辨率不一样,有关系吗?
有关系。底层decoder解码时,会根据分辨率等参数,创建解码后的Output Buffer, 假设分辨率突然变大了,那buffer大小就不够,无法存储,会崩溃。
4. Audio sample rate /channel number不一样有关系吗?
有关系。因为这2个参数,在播放音频时,底层建立decoder,就需要设置这2个参数,如果解码到一半,突然变了,一声道变成2声道了,或者sample rate从44.1k变成32k了,那有些厂商如果不支持sample rate动态变化,就会出错,最终效果,很可能是播放时变成杂音。
- Android将多个视频文件拼接为一个文件
- 视频文件(avi)截取为Bitmap文件
- 使用java进行视频文件拼接
- opencv avi视频文件简单拼接
- ffmpeg将音视频文件转换为wav文件
- 代码学习,将视频文件处理为ppm文件
- 读取视频文件,保存帧图片为ppm文件
- Java将多个文件压缩为一个文件
- android 资源文件String字符串拼接
- android 资源文件String字符串拼接
- android 资源文件String字符串拼接
- android 资源文件String字符串拼接
- android 播放assets文件里视频文件的问题
- SQL Server中将多行数据拼接为一个字符串
- iOS多个视频拼接合成为一个视频
- SQL将一个表数据拼接为一行
- 关于Android 为从右向左字串拼接 "\u200f"
- 本程序实现转码一个普通视频文件为视频mpeg4,音频mp3的功能
- My first JSON server我的第一个JSON服务器
- sdut 2140 有向图中是否存在拓扑序列的判断
- c#中的socket类
- poj3083——Children of the Candy Corn
- 条件语句
- Android将多个视频文件拼接为一个文件
- Java调用MATLAB,将文件转换为二进制流
- 集成融云聊天室(自定义聊天界面)
- linux安装jdk方法
- MAVLINK协议简介
- ASE_期末主观题
- 331. Verify Preorder Serialization of a Binary Tree
- 自动内存管理机制(4)——垃圾回收算法
- 锐格难题收录(原创)11.23最近更新