【问题标题】:IframeExtractor don't output sound with rtspIframeExtractor 不使用 rtsp 输出声音
【发布时间】:2013-01-08 12:33:27
【问题描述】:

我使用来自 git mooncatventure 的 IframeExtractor,它可以很好地播放 .mov 文件。 但是当我尝试读取 rtsp 流时,我听不到任何声音。

这是来自 rtsp 流的 FFMEG 转储:

Metadata:
title           : unknown
comment         : unknown
Duration: N/A, start: 49435.000589, bitrate: 258 kb/s
Program 3223 
No Program
Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 720x576 [SAR 64:45 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1(fra): Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 142 kb/s
Stream #0:2(fra): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006)
Stream #0:3(qad): Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, mono, fltp, 47 kb/s
Stream #0:4(qaa): Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 68 kb/s

这是本地 .mov 文件的转储文件:

Metadata:
major_brand     : qt  
minor_version   : 0
compatible_brands: qt  
creation_time   : 2010-01-17 21:52:33
model           : iPhone 3GS
model-eng       : iPhone 3GS
date            : 2010-01-17T16:52:33-0500
date-eng        : 2010-01-17T16:52:33-0500
encoder         : 3.1.2
encoder-eng     : 3.1.2
make            : Apple
make-eng        : Apple
Duration: 00:00:03.25, start: 0.000000, bitrate: 3836 kb/s
Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 640x480, 3695 kb/s, 30.02 fps, 30 tbr, 600 tbn, 1200 tbc
Metadata:
  rotate          : 90
  creation_time   : 2010-01-17 21:52:33
  handler_name    : Core Media Data Handler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s
Metadata:
  creation_time   : 2010-01-17 21:52:33
  handler_name    : Core Media Data Handler

管理声音的音频类包含一个编解码器检测器,它表示为两个输入找到编解码器 CODEC_ID_AAC:

audioStreamBasicDesc_.mFormatFlags = 0;
switch (_audioCodecContext->codec_id) {
    case CODEC_ID_MP3:
         audioStreamBasicDesc_.mFormatID = kAudioFormatMPEGLayer3;
        break;
    case CODEC_ID_AAC:
         audioStreamBasicDesc_.mFormatID = kAudioFormatMPEG4AAC;
         audioStreamBasicDesc_.mFormatFlags = kMPEG4Object_AAC_Main;
        NSLog(@"audio format aac %s (%d) is  supported",  _audioCodecContext->codec_name, _audioCodecContext->codec_id);
        break;
}

我看到数据进入缓冲区,但我什么也没听到。可能是 audioStreamBasicDesc_ 设置错误,但我找不到。

可能不是同一个 AAC 编解码器吗?

有人遇到过同样的问题吗?

欢迎任何帮助,我从几天前就开始处理这个问题了。

编辑: 我发现了一个以前没有的错误,我不知道如何解决它。如果我将 audioStreamBasicDesc.mFramesPerPacket 更改为 0 或除以 2,则错误消息消失。

AudioConverterNew returned 'fmt?'
Prime failed ('fmt?'); will stop (72000/0 frames)

【问题讨论】:

  • 当然,但这是一个非常简单的音频解码器,专为单声道摄像头输入而设计,有几个示例项目具有更复杂的音频解码器,请参阅示例解码器、rtspplay 等。对于更多内容,我们有商业产品将工作,您可能没有计算缓冲区所需的所有信息。

标签: iphone ios ffmpeg codec


【解决方案1】:

您可以尝试在此处强制设置任意大的缓冲区大小,例如 480000

status = AudioQueueAllocateBufferWithPacketDescriptions(audioQueue_, 
    audioStreamBasicDesc_.mSampleRate * kAudioBufferSeconds / 8, 
    _audioCodecContext->sample_rate * kAudioBufferSeconds / 
      _audioCodecContext->frame_size + 1, 
    &audioQueueBuffer_[i]);

【讨论】:

  • 感谢您的帮助米歇尔!强制缓冲区大小仍然不输出任何声音。也许 aac (mp4a / 0x6134706D) 和 aac ([15][0][0][0] / 0x000F) 描述有关系。我的日志中也有错误,我会编辑它们并将它们添加到我的原始答案中。
  • 只需测试您的 RtspPlay,它是一个不错的播放器,但视频和声音与我的 rtsp 网址不连续。
  • 该播放器没有出现很多音频问题,而且您的网址无法与 iframeextractor 一起使用,这让我觉得这里发生了其他事情。也许丢包,尝试将 ?tcp 放在 url 字符串的末尾,这应该尝试强制使用 tcp 而不是 udp。
  • 我尝试通过 tcp 选项,但我认为 rtsp 服务器不接受它。我得到“方法设置失败:461 不支持的传输。没有 tcp,我有很多“ac-tex 损坏...”、“mb incr 损坏”、“00 motion_type at..”、“切片不匹配”。 url 在 vlc 中可以正常播放。
  • 由于它们位于不同的平台上,因此您无法假设它是否适用于 vlc 而不是 iOS,它一定是播放器,问题是您收到的所有这些消息,所以有些东西阻止了 udp ,您是在 wifi 还是蜂窝网络上使用您的设备。我很想在我们的商业非 sdl 产品上试用此功能,但您必须直接与我们合作
猜你喜欢
  • 2017-04-07
  • 2013-08-11
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多