7

Webカメラデータをクライアントにストリーミングします。

('data')をリッスンすると、データが到着していることがわかります。ただし、作成すると表示できず、データがガベージであるか、ヘッダーが欠落している可能性があります。VLCはそれを再生できません。

次のステップは、ブラウザにリアルタイムでストリーミングできるようにすることです。

私は何が間違っているのですか?

net = require('net');
fs = require('fs');

// Start a TCP Server
net.createServer(function (socket) {    
    console.log("client connected");
    var file = fs.createWriteStream("temp.mp4");
    socket.pipe(file, {end: false});

    socket.on('end', function(){
        console.log("ended");
    });
}).listen(5000);

私はそれが本当にビデオ出力をキャプチャしたかどうかを確認するためにテストしました:

$ mediainfo temp.mp4 

General
Complete name                            : temp.mp4
Format                                   : H.263
Format version                           : H.263
File size                                : 126 KiB

Video
Format                                   : H.263
Width                                    :  pixel0
Height                                   :  pixel0
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Compression mode                         : Lossy

そしてこれは設定のための次のAndroidコードですmediaRecorder(ソケットが接続されていると仮定します、問題ありません)

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
    mediaRecorder.setVideoSize(320, 240);
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

    ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);     
    mediaRecorder.setOutputFile(pfd.getFileDescriptor());

    mediaRecorder.setMaxDuration(5000);
    mediaRecorder.setMaxFileSize(5000000);
4

1 に答える 1

6

Spydroid (ブラウザー/VLC ストリーミング) やAndroid IP カメラ(ブラウザー ストリーミング)など、この問題を解決するオープン ソース プロジェクトがいくつかあります。あなたの実装は Spydroid に似ているように見えるので、そのコードの一部を適応させることができるかもしれません。

中心的な問題は、MediaRecorder未加工のビデオ フレームをソケットに書き込むことです。ヘッダーを書き込むにはビデオが終了するまで待つ必要がありますが、ファイルの先頭に表示する必要があります。ソケットはシークできないため、ヘッダーを正しい場所に書き込むことができません。上記でリンクされたプロジェクトは、ストリームを RTSP (Spydroid) にパケット化するか、一連の静止画像をブラウザー (Android IP Camera) に「ストリーミング」することで、この問題に対処しています。

于 2012-11-21T04:39:23.007 に答える