Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
ILoveLin opened this issue Feb 2, 2023 · 6 comments

Comments

@ILoveLin
Copy link

ILoveLin commented Feb 2, 2023

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

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

@CherryLover
Copy link

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

@ILoveLin
Copy link
Author

ILoveLin commented Feb 14, 2023

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

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

@CherryLover
Copy link

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

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

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

@ILoveLin
Copy link
Author

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

@CherryLover
Copy link

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

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

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

@CherryLover
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants