【问题标题】:Right choice to play audio and video content播放音频和视频内容的正确选择
【发布时间】:2012-06-22 14:19:32
【问题描述】:

我在做什么:

我需要在 iPhone/iPad 上播放 Apple 不支持的音频和视频文件,例如包含多个音频通道的 mkv/mka 文件。

我正在使用 libffmpeg 在媒体文件中查找音频和视频流。 使用avcodec_decode_video2 解码视频,使用avcodec_decode_audio3 解码音频 每个函数的返回值如下

  • avcodec_decode_video2 - 返回AVFrame 结构,该结构封装了来自pakcage 的视频视频帧的信息,特别是具有data 字段,它是指向图片/通道平面的指针。
  • avcodec_decode_audio3 - 返回 int16_t * 类型的 samples 我猜这是原始音频数据

所以基本上我已经完成了所有这些并成功解码了媒体内容。

我必须做什么: 我必须使用 Apple 服务相应地播放音频和视频。我需要执行的播放应该支持在播放视频时混合音频通道,即假设 mkv 文件包含两个音频通道和一个视频通道。所以我想知道哪种服务适合我?我的研究表明,AudioQueue 服务可能是有用的音频播放,并且可能是视频的 AVFoundation。

请帮助为我的情况找到合适的技术,即视频播放 + 音频播放以及可能的音频通道混合。

【问题讨论】:

    标签: iphone ffmpeg avfoundation core-audio audioqueueservices


    【解决方案1】:

    你走在正确的道路上。如果您只播放音频(根本不录制),那么我会使用 AudioQueues。它会为你做混合。如果您正在录制,那么您应该使用 AudioUnits。看看 Apple 的 MixerHost 示例项目。对于视频,我建议使用 OpenGL。假设图像缓冲区在 YUV420 中,那么您可以使用简单的两遍着色器设置来渲染它。我相信有一个 Apple 示例项目展示了如何做到这一点。在任何情况下,您都可以使用 OpenGL 渲染任何像素格式,并使用着色器将像素格式转换为 RGBA。希望对您有所帮助。

    【讨论】:

    • 感谢史蒂夫的回复,基本上我的应用程序完成了所有工作,即记录、播放混合音轨和播放视频。因此,正如我从您的回复中了解到的那样,我必须选择 1. Audio Queue:用于音频混合和播放 2. AudioUnits:用于录制音频 3. OpenGL:用于显示视频。我做对了吗?
    • 如果您同时录制和播放,我会推荐所有的 AudioUnits。在这种情况下,您将需要使用语音处理 IO 单元。如果您不这样做,那么您的录音将包含扬声器的输出。 VP IO 单元采用声学回声消除。是的,OpenGL 将更有可能表现最好。我也会先测试其他 API,看看它们是否可以接受(例如 CoreImage 或 CoreGraphics)。
    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多