gpt4 book ai didi

android - 使用 MediaCodec 进行 H264 流式传输

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:56 26 4
gpt4 key购买 nike

我目前正在尝试将 Android 用作 Skype 端点。在此阶段,我需要将视频编码为 H.264(因为它是 Skype 唯一支持的格式)并使用 RTP 对其进行封装,以便进行流式传输。

显然 MediaRecorder 出于各种原因不是很适合这个。一是因为它在完成后添加了 MP4 或 3GP header 。另一个是因为为了将延迟减少到最低限度,硬件加速可能会派上用场。这就是为什么我想利用最近对框架的低级添加,如 MediaCodecMediaExtractor 等。

目前,我计划按以下方式工作。相机将其视频写入缓冲区。 MediaCodec 使用 H264 对视频进行编码并将结果写入另一个缓冲区。该缓冲区由 RTP 封装器读取,它将流数据发送到服务器。这是我的第一个问题:您觉得这个计划可行吗?

现在我已经完成了第一步。由于 Internet 上所有关于使用相机的文档都使用了 MediaRecorder,因此我找不到在编码之前将其原始数据存储到缓冲区中的方法。是addCallbackBuffer适合这个吗?有人有示例链接吗?

接下来,我找不到很多关于 MediaCodec 的文档(因为它相当新)。谁有可靠的教程?

最后:对 RTP 库有什么建议吗?

提前致谢!

最佳答案

更新
我终于能够从 h264 帧创建正确的 RTP 包。以下是您必须牢记的内容(实际上很简单):

编码器确实为每个帧创建 NAL header 。但它会将每一帧作为 h264 bytestream 返回。这意味着每个帧都以三个 0 字节和一个 1 字节开始。您所要做的就是删除那些起始前缀,并将帧放入 RTP 数据包(或使用 FU-As 将它们拆分)。

现在回答您的问题:

I cannot find a way to store its raw data into a buffer before encoding. Is addCallbackBuffer suited for this?

您应该使用 camera.setPreviewCallback(...),并将每一帧添加到编码器。

I cannot find a lot of documentation about MediaCodec (since it's fairly new). Anyone who has a solid tutorial?

这应该很好地介绍了 MediaCodec 的工作原理。 http://dpsm.wordpress.com/2012/07/28/android-mediacodec-decoded/

Lastly: any recommendations on RTP libraries?

我正在使用 jlibrtp 来完成工作。

关于android - 使用 MediaCodec 进行 H264 流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13397863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com