microshow / RxFFmpeg

🔥💥RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac + opencore-amr + openssl ) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能:视频拼接,转码,压缩,裁剪,片头片尾,分离音视频,变速,添加静态贴纸和gif动态贴纸,添加字幕,添加滤镜,添加背景音乐,加速减速视频,倒放音视频,音频裁剪,变声,混音,图片合成视频,视频解码图片,抖音首页,视频播放器及支持 OpenSSL https 等主流特色功能

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

在线直播的音频流地址和视频流地址可以通过此FFmpegAndroid 合成一路直播流(音视频流),再用播放器播放吗?

ILoveLin opened this issue · comments

目前条件:有视频流地址,有该视频流相对于的音频流地址
功能需求:把音频流和视频流合成一路音视频流,然后用vlc(或者其他播放器)播放

能够合成一路音视频流地址,吗?合成之后我在本地app 播放器(vlc)可以播放出来吗?

你这就相当于是将音视频流封装成标准 MP4,如果视频流是 H264 或 H265,音频流是 AAC 的,你可以直接用 Android 系统的 MediaMuxer 来完成这个操作。如果音频流不是 AAC 的,你需要将 AAC 转成其他格式的即可。

你这就相当于是将音视频流封装成标准 MP4,如果视频流是 H264 或 H265,音频流是 AAC 的,你可以直接用 Android 系统的 MediaMuxer 来完成这个操作。如果音频流不是 AAC 的,你需要将 AAC 转成其他格式的即可。

您好,您的意思我懂了,我必须拿视频流(H264或H265)和音频流是 (AAC)(这些都是原始数据吧 我该如何拿到???),再用Android 系统的 MediaMuxer 来完成这个操作,这个操作合成之后是一个存储在本地的合成后的音视频文件.mp4格式的,然后我在使用我自己写的App(基于vlc的播放器)来播放本地文件对吧?是我复述的这么个流程吗?

不好意思 之前有事,一直耽误了没回。

音视频的原始流信息,就在你现在需要播放的来源里。来源就是你说的在线直播的音频流、视频流地址,推过来的数据。你需要明确的知道,推过来的每一包数据的数据结构是什么样的,比如前 30 个字节是头信息,里面描述,当前视频帧的宽、高、格式、大小、PTS 等元数据,剩下的是视频帧数据,这时候你就需要解析出,你所需要的 元数据(宽高、格式、PTS)以及视频帧,这样也就可以塞到 Muxer 里了;同理,音频也是如此,只是音频需要的原数据更少一些。比如:采样率、通道数。

需要注意的是,Android 写入 MP4,音频轨需要除了上述的元数据外还需要写入一个 csd-0 的值,视频轨同样需要,csd-0,csd-1 不过 H264 和 H265 的计算方式不同,这部分你需要网上多查查。

果真是大佬,我音视频小白 表示一脸懵逼
再请教个问题我使用RxFFmpeg
这个Demo,可以直接对在线直播的视频流或者点播的url地址,使用ffmpeg命令,直接录制视频保存.mp4格式吗?如果可以的话我就直接再次基础上做一个播放器,还来得及简单

应该是可以的,不过我没有实际用过 FFMpeg 接入到项目里,我一直是用 MediaCodec。有个问题你需要自己去确认一下,我没有读过 RxFFmpeg 的源码。

RxFFmpeg 是拿到直播流之后之后直接丢给 FFmpeg 去做的解封装、解码、渲染还是 RxFFmpeg 是调用 FFmpeg 的 API 进行解封装,然后再调用 API 解码,最后调用 API 进行渲染;

如果是后者,你可以参与进来,可以拿到原始的视频帧,进而写入到 MP4 文件里,如果是前者,由于 MP4 的封装格式都丢给 FFMpeg 了,相当于是一个黑盒,而且如果 FFmpeg 并没有对外提供纯视频帧的回调「钩子函数」,那你就无法这种方式来做。

最近一直挺忙的,GitHub 可能没来得及看,他的推送邮件也没读,就晚了点。如果着急的话,可以加下微信,通过邮箱发来微信号就行。jiangjiwei0322@outlook.com