dポイントプレゼントキャンペーン実施中!

QuickTime のようなHTTPストリーミングを行うアプリの開発を検討しております。
おそらく、MFCのWinInetクラスを使って実装可能と思うのですが、QucikTimeは、サーバからダウンロードしたデータを取得しながら再生していますが、同様にデータを一括取得ではなく、取得しながら逐次的にデータを処理するようなしくみを実現する方法について、ご教示いただければと思います。もしありましたら、サンプルプログラムをお願い致します。

A 回答 (2件)

> (1) UINT nRead = pFile->Read(szBuff, 1023)


> は、ダウンロードが完了しなくても1023バイト受信したら、即時データが読み込めるということでよろしいでしょうか。

その通りです。再掲になりますが、TCP/IPの通信には「ダウンロードが完了」なんて概念はありません。
サーバー側から送られてきたデータを、その場ですぐに順次受け取っていくことしか出来ないのです。
(逆に「ダウンロードが完了してからデータを全部受け取る」方が面倒なぐらい)

> (2) //read file...
> の部分は、
> nRead = pFile->Read(szBuff, 1023);
> と置き換えればいいでしょうか。
そうです。それと、受け取ったデータの処理を、Read後に書く必要があります。
    • good
    • 0
この回答へのお礼

とても参考になりました。ありがとうございました。

お礼日時:2008/12/16 11:33

TCP/IPの「通信プログラム」としては、ダウンロードもストリーミング再生も違いはありません。



TCP/IPでの通信では、送信側で送ったデータが
受信側にいきなり全て現れるのではなく、
細切れにされたデータが次々と届くようになってます。

例えば、
http://msdn.microsoft.com/ja-jp/library/sb35xf67 …
に、WinInet のサンプルプログラムがありますが、
そのプログラムでは、最大1023バイトの受信を繰り返すようになってます。

そうやって受け取ったデータの取り扱い方法で、
・ダウンロード: 受け取ったら逐次ファイルに追記保存していく
・ストリーミング: 受け取ったら逐次表示していく
といった違いは出てくるのですが、受信手順は変わりません。。

この回答への補足

早速のご回答ありがとうございます。
提示いただいたサンプルプログラムの、

UINT nRead = pFile->Read(szBuff, 1023);
while (nRead > 0)
{
//read file...
}

で確認させていただきたいのですが、

(1) UINT nRead = pFile->Read(szBuff, 1023)
は、ダウンロードが完了しなくても1023バイト受信したら、即時データが読み込めるということでよろしいでしょうか。

(2) //read file...
の部分は、
nRead = pFile->Read(szBuff, 1023);
と置き換えればいいでしょうか。

補足日時:2008/12/15 20:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!