MPEG-TS, Android and FFMPEG

3
我正在接收混合了H.264视频和AAC音频流的MPEG-TS(MPEG传输流)数据包。我需要能够在Android手机上显示音频和视频。我的假设是我需要以下内容:
  • MPEG-TS解复用器
  • AAC解码器
  • H.264解码器
  • 同步音频和视频播放
假设我是正确的,那么(在Android 2.x中)MPEG-TS解复用器不是操作系统的一部分,必须进行移植,AAC和H.264解码器是Android操作系统的一部分,但我不确定它们是否有接口,允许在缓冲区中传递数据,以及它们是否允许互相同步。在最坏的情况下,这些组件也必须在此处进行移植。
你能给我一些建议从哪里开始吗?我正在考虑FFMPEG移植。还有其他方法吗?
问候, STeN
4个回答

2
Android 4.x拥有OpenMAX,可以播放带有H264和AAC的TS流。您甚至不需要担心音视频同步问题。
请查看NDK中的nativemedia示例。
如果您想支持早期版本的Android,则ffmpeg可能是一个不错的选择,但它最多只能为您提供RGB或任何其他格式的解码视频帧和PCM格式的解码音频。然后,您将不得不自己实现渲染器和音频播放。我建议阅读这篇教程 - http://dranger.com/ffmpeg/。虽然它不是针对Android的,但它会让您了解视频播放的工作原理。

你好,我们已经完成了基于FFMPEG的HLS(H.264 / AAC)播放器的Android版本,并且它运行良好!我们投入的精力是3-4个有经验的开发人员一个月的工作量。问题在于ARM6 / VFP或没有NEON或TEGRA支持的ARM7上的软件解码速度不如具备硬件支持的快。因此,我们现在正在寻找2.3x上的StageFright集成 - 到目前为止还没有成功 - 请参见:http://stackoverflow.com/questions/11266891/how-to-enable-hw-decoder-via-stagefright-in-ffmpeg-android-port - STeN
1
在2.3上,您可以使用标准API至少通过OpenSL ES硬件加速AAC解码。 - Dmitry

1

你试过这个吗?对此有什么经验吗?有几个FFMPEG端口可用... - STeN
是的,有几个选择。这个项目正在运作,我已经试过了。 - ciphor

1
在 Gingerbread (2.3) 中,实际上有一个 MPEG TS 解析器在 stagefright 框架中可以使用。此外,我相信它与 H264 和 AAC 解码器很好地集成在一起。MPEG TS 解析器没有在任何地方进行宣传,但支持悄然存在。我相信他们已经将其带到了 HC 或更高版本中以支持 Apple HTTP Live 流,但该代码也存在于 Gingerbread (2.3) 代码库中。通过对框架的微小修改,您可以播放 http 实时流(实际上发送 TS 包)。我想上面的信息对您有所帮助。
Vibgyor

你好,你认为它也可以向后移植到2.1和2.2吗?即从stagefright框架中向后移植MPEG TS解析器,并将其“某种方式”连接到H.264 / AAC解码器? - STeN
你好,MPEG TS解析器代码已经在2.3版本中整合到了stagefright框架中。回溯移植到2.2可能并不难,因为2.2也支持stagefright框架,但我想在2.1中回溯移植它将会非常困难,因为2.1中只有opencore框架。 - Mukesh
Vibgyor,你提到了一个小修复程序,可以使姜饼系统支持MPEG TS。你有详细的链接吗? - idlethread

0

(免责声明:我个人参与了下面链接的免费开源程序的开发)

ZShaolin提供了FFMpeg的静态版本(包括库和命令行),http://dyne.org/software/zshaolin还包含其他媒体转换工具。

使用它可以方便地进行脚本实验,而无需从头编译FFMpeg。


2
欢迎来到Stack Overflow!感谢您发布答案!请务必仔细阅读有关自我推广的FAQ。同时请注意,每次链接到您自己的网站/产品时,必须发布免责声明。 - Andrew Barber
感谢留言。我认为以下信息仍然有用:据我所知,没有其他针对Android静态编译的FFMpeg便携二进制文件,而且您的论坛上对此有相当大的需求。这里并非自我推销...我只是想要“做好自己的工作,让别人看到”。 - Jaromil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接