4

私は新しい iOS 開発者です。ビデオ共有サイトのビデオ プレーヤー アプリに取り組んでいます。ここでは、記録が 2 つのビデオ ストリームで構成される場合があります (1 つはプレゼンターを表示し、もう 1 つは彼の画面の記録を表示します)。この 2 番目のビデオを AVFoundation で再生して、AVPlayer を作成しようとしています。一部のビデオでは非常にうまく機能しますが、他のビデオではメモリが不足します。多くの調査の結果、ビデオ全体をメモリにバッファリングしようとしていることがわかりました。

何時間もグーグルで検索しましたが、何も見つかりませんでした。

これを実証するためだけに小さなプロジェクトを作成しました: github project . 2 つの異なるビデオ ストリーム用に 2 つの AVPlayer をセットアップし、UI を更新してプレーヤーの AVPlayerItem の loadedTimeRanges を表示します。最初のビデオでは最大 60 秒しかバッファリングされませんが、これは素晴らしいことですが、2 番目のビデオではバッファリングを続けます。

self.player1 = [AVPlayer playerWithURL:url1];
self.player2 = [AVPlayer playerWithURL:url2];

および 2 つのテキスト ラベル:

self.data1.text = [NSString stringWithFormat:@"Player 1 loadedTimeRanges: %@",
                      self.player1.currentItem.loadedTimeRanges];
self.data2.text = [NSString stringWithFormat:@"Player 2 loadedTimeRanges: %@",
                      self.player2.currentItem.loadedTimeRanges];

多分これは重要かもしれません: オーバーバッファリングビデオにはオーディオトラックがなく、ビデオだけがあります.

更新: AVPlayer の代わりに MPMoviePlayerController を使用し、playableDuration プロパティをチェックして問題を再現しました。最初のムービーでは約 60 秒で停止し、2 番目のムービーでは継続してメモリ不足になります。

更新 2 : 実際のビデオ ファイルを入手して Dropbox にアップロードし、それらをストリーミングしようとしました: 問題はありません! ムービー全体をバッファリングしますが、メモリ不足にはなりません。元のサイト (私たちのビデオ共有サイト) からストリーミングすると、メモリが不足するだけです。URL は github プロジェクトにあります。

これを引き起こす可能性のあるヒントを本当に楽しみにしています。

ありがとうございました!

4

1 に答える 1

1

この問題は、Wowza メディア サーバーから送信されたビデオ ストリームのオーディオ トラックがないために発生します。(ストリーム URL から、Wowza メディア サーバーを使用してビデオをストリーミングしていると推測しました)。

この問題を確認するために、オーディオ トラックのない 5 分間のビデオ ファイルを作成しました。

mplayer -nolirc -vo null -ao null -frames 0 -identify test_60.mp4
...
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
ID_VIDEO_CODEC=ffh264
Audio: no sound
Starting playback...
...

次に、mp4box を使用してそのビデオ ファイルに mp3 トラックを追加しました。

MP4Box -new -add test_60.mp4 -add test_music.mp3 test_60_music.mp4

そして、実際にオーディオ トラックがあることを確認しました。

mplayer -nolirc -vo null -ao null -frames 0 -identify /tmp/test_60_music.mp4
...
AUDIO: 44100 Hz, 2 ch, floatle, 320.0 kbit/11.34% (ratio: 40000->352800)
ID_AUDIO_BITRATE=320000
ID_AUDIO_RATE=44100
ID_AUDIO_NCH=2
Selected audio codec: [ffmp3float] afm: ffmpeg (FFmpeg MPEG layer-3 audio)
==========================================================================
AO: [null] 44100Hz 2ch floatle (4 bytes per sample)
ID_AUDIO_CODEC=ffmp3float
Starting playback...
...

次に、test_60.mp4 と test_60_music.mp4 の両方を Wowza コンテンツ ディレクトリに配置し、テストしました。私は実際にあなたのような小さなテスト アプリを作成して、loadedTimeRanges を調べましたが、デバイスからサファリを介してビデオをロードするだけで、違いを確認するのに十分なはずです。

wowza_server:1935/vod/mp4:test_60.mp4/playlist.m3u8 を開き、再生が始まったらすぐに一時停止を押しました。バッファ インジケータは、5 分間のビデオ全体が読み込まれるまで増加し続けました。

次に、wowza_server:1935/vod/mp4:test_60_music.mp4/playlist.m3u8 を開いて同じことを行いましたが、最初の 1/5 (約 1 分) だけが読み込まれました。

つまり、Wowza サーバーのパケット化に問題があるようです。この問題は、Adobe (フラッシュ) メディア サーバー 5.0 では発生しないことに注意してください。ビデオにオーディオ トラックが含まれているかどうかに関係なく、60 秒だけがバッファリングされます。

お役に立てば幸いです。Wowza フォーラムで Wowza 関係者に意見を求めました。

于 2012-10-18T20:12:45.490 に答える