2011-10-13 7 views
0

最近、iPhone Streaming(MMSプロトコルベース)のソフトウェアアーキテクチャを研究していました。「Hook」libMMSからFFmpeg for iPhoneへのストリーミング

私たちが知っているように、MMSオーディオストリームを再生するには、libMMSを呼び出してリモートメディアサーバーからwmaストリームデータを読み込み、FFmpegを呼び出してwma形式のストリームデータをPCMデータバッファにデコードし、 PCMデータバッファをiPhoneのオーディオキューにエンキューして、実際のサウンドを生成します。

上記の紹介は、iPhoneストリーミングの作業プロセスを説明しています。この単純な機能を実装するだけで済むのであれば、それほど難しいことではありません。 libMMS、FFMpegおよびaudioqueueを段階的に呼び出すために上記の紹介に従うだけで、ストリーミング機能を実現できます。実際、私は先週コードを実装しました。

しかし、私が必要とするのは、単純なストリーミング機能だけではありません!私はソフトウェアが必要ですarchitechtureはローカルファイルシステムにアクセスするのと同じように、FFmpegをlibMMSにアクセスさせます!

誰かがav_read_frame/av_seek_frameのようなFFmpegファイルシステムインターフェイスにmms_read/mms_seekのようなlibMMSインターフェイスをフックする方法を知っていますか?私は再びこの時間を自分の質問に答えるために持っていると思う

答えて

1

......

数週間の研究内容およびデバッグの後、私は最終的に真実を得ました。

実際、私たちはlibMMSをFFMpegに "フック"する必要はありません。どうして? FFMpegにはすでにネイティブmmsプロトコルプロセスモジュール "mms_protocol"があります(FFMpegのmms_protocol.cを参照)。

私達はちょうどこのようなMMSモジュールを有効にするには、FFMPEGを設定するだけです(FFMPEGでconfig.hの中で参照してください)。

#define ENABLE_MMS_PROTOCOL 1 
#define CONFIG_MMS_PROTOCOL 1 

をこの設定の後、FFMPEGは、そのプロトコルにMMSプロトコルを追加しますリスト。 (実際には、プロトコルリストにはすでに「ローカルファイルシステムプロトコル」が含まれています)。結果として、FFMpegはローカルメディアファイルのような "mms:// hostserver/abc"メディアファイルを扱うことができます。したがって、mmsメディアファイルを開いて読み込むことができます:

av_open_input_file(); 
av_read_frame(); 

私たちは地元のメディアファイルと同じようでした!

ところで、私のffmpegバージョンでは、処理中のmmsプロトコル用のlibAVFormatモジュールにはまだ多くのバグがあります。しかし、私はそれをデバッグするために1週間かかったが、あなたと同じくらいスマートな人の方がずっと短くなると思う:-)

+0

こんにちは謝、mssを読むために使ったコードを投稿してくださいストリーム。 – Dhanaraj

関連する問題