WiFiを介してAndroidフォン間でライブストリーミングビデオ


115

Androidフォンから別のAndroidフォンにWiFi接続を介してビデオストリーミング機能を実装する方法について、これまで何日もインターネットを検索してきましたが、何も役に立たないようです。私はサンプルコード、stackoverflow、google、androidブログをAndroid開発者に探しましたが、何もありませんでした。私が見つけることができるのは、ストリーミング用の電話からデスクトップまたはデスクトップから電話へのソリューションのようなものだけですが、私の実装で借りることができるものは何もありません。

私はarduino ADKを使用してロボットを制御する必要があるため、2台の電話を使用しています。1台はロボットに搭載され、もう1台はロボットからビデオストリームを受信します。放送時間と視聴時間の間の遅延を最小にしようとしているので、これについて言及します。

私は2つのアプリを作成しています。1つは、スレーブアプリを制御してストリームを受信するロボット(ハンドヘルド電話から)を制御するマスターアプリ、もう1つは、ロボット/ストラップ付き電話で実行され、モーター/アクチュエータを制御するスレーブアプリです。 /マスターアプリへのストリーミング。残念ながらサードパーティのアプリは使用できません。ビデオストリームコードを2つのアプリに統合する必要があります。

これを達成するためのオプションは何ですか?また、JavaとAndroidの両方の開発でかなりうまくやっているのは難しいのですが、ビデオストリーミングを使用したことがないので、実行するのは非常に困難です。ストリームのエンコード/デコード方法、接続の開始方法、TCP / IPではなくUDPを使用する必要がありますか?サンプルコードがないため、どこから始めればいいのか本当にわかりません。これは達成できると確信しています。正しい方向に進むために役立つ情報が見つからないだけです。

私はspydroidを偶然見つけました が、デスクトップでVLCを使用しているので、私にはよくありません。


編集: Cagney Moreauのブログをチェックしてください。彼はこれを実装することについて詳しく説明します。


1
プロジェクトを共有してもらえますか?私も同じようなことをしていますが、Androidとデスクトップ(WebClient)の間でビデオをストリーミングしています...私はhtml5 + WebSocketについて考えましたが、多くの問題に直面しています...
Buksy

1
私はそのような解決策を開発しています、それはあなたがやろうとしていることと80%同じです。VOIPサーバーを構成し、音声とビデオを転送するVOIPのクライアントを作成する必要があります。私も探しています。どなたかご存知でしたらお知らせください。
AZ_ 2013年

1
メールは私のプロフィールに記載されています
AZ_ 2013年

1
私のプロジェクトをチェックしてください。すべてjavaで詳細に説明cagneymoreau.com/stream-video-android
cagney

1
おかげで私はロボットにも取り組んでいます。楽しいもの
cagney

回答:


55

アプリで録音と再生の機能が必要ない場合は、市販のストリーミングアプリとプレーヤーを使用するのが妥当な選択です。

ただし、それらをアプリに含める必要がある場合は、MediaRecorder API(サーバー/カメラアプリの場合)およびMediaPlayer(クライアント/プレイヤーアプリの場合)を調べる必要があります。

サーバーのクイックサンプルコード:

// this is your network socket
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
mCamera = getCameraInstance();
mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// this is the unofficially supported MPEG2TS format, suitable for streaming (Android 3.0+)
mMediaRecorder.setOutputFormat(8);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());
mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();

プレイヤー側では少しトリッキーです、これを試すことができます:

// this is your network socket, connected to the server
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(pfd.getFileDescriptor());
mMediaPlayer.prepare();
mMediaPlayer.start();

残念ながらメディアプレーヤーはこれを好まない傾向があるため、(a)ソケットからファイルにデータを保存し、(少しのデータを取得した後)ファイルからメディアプレーヤーで再生するか、(b)小さなhttpを作成するかのいずれかを選択できます。ローカルで実行され、mediaplayerのGET要求を受け入れ、HTTPヘッダーで応答し、データをリモートサーバーからそこにコピーできるプロキシ。(a)の場合は、ファイルパスまたはファイルのURLを使用してmediaplayerを作成し、(b)の場合は、プロキシを指すhttp urlを指定します。

以下も参照してください。

ソケットfdを使用して電話から電話にライブビデオをストリーミング

MediaPlayerがMP3再生の開始時に途切れる


2
こんにちはアレックス、RTP経由でAndroid携帯電話からローカルに保存されたオーディオファイルを送信する経験はありますか?
B770 2013

こんにちは、私にそれの完全なプロジェクトを送っていただけますか?
Umar Asghar

1
完全なプロジェクトを投稿していただけますか?
Yazhini Murugaiya 2016年

サーバーソケットとクライアントソケットの
どちらか

1
@AhmedHamdy確かに:APIレベル23(Android 6.0)setDataSource(MediaDataSource)では、の代わりに使用できますFileDescriptor。実装MediaDataSourceすると、一時ファイルに書き込むことなく、独自のネットワーク読み取りとバッファリングを実行できます。
アレックスI

9

一度はこのような作業をしましたが、ビデオを送信してリアルタイムで再生するのは非常に複雑です。PNGのみで作業することをお勧めします。私の実装では、ホストカメラを使用してPNGをキャプチャし、ネットワーク経由でクライアントに送信しました。これにより、画像が受信されるとすぐに表示され、ホストに次の画像を要求します。wifiを使用しているため、通信は1秒あたり約8〜10枚の画像を取得するのに十分な速さになります(概算のみ、私はBluetoothで作業しました)。したがって、これは連続したビデオのように見えますが、はるかに少ない労力で行われます。通信には、UDPソケット(高速でそれほど複雑ではない)またはDLNA(それがどのように機能するか不明)を使用できます。


ええ、これは私の最後の手段になるでしょう。フィードバックをお寄せいただきありがとうございます!
androidu 2013年

3
確かに、jpegストリームはpngストリームよりも効率的でしょうか?
ステルスコプター2013年

私は単に画像を使用することを提案していました、あなたはあなたが望むどんなフォーマットでも使うことができます
Arveen

@krossreg>あなたが提案したもののサンプルコードを貼り付けてもらえますか?
Jasper

8

IP WebcamまたはDLNAを使用できます。たとえば、Samsungデバイスには、ネットワーク上のDLNA対応デバイスを共有およびアクセスできるAllShareというアプリが付属しています。ただし、IP Webcamが最善の策だと思います。MXビデオプレーヤーなどを使用して、作成したストリームを開くことができるはずです。


2
私は2つのアプリを作成しています。1つは(ハンドヘルド電話から)ロボットを制御し、ロボットが見るものを表示するマスターアプリです。2つ目は、モーター/アクチュエータ/ストリーミングを制御するロボットに縛られた電話で実行されるスレーブアプリです。残念ながらサードパーティのアプリは使用できません。ビデオストリームコードを2つのアプリに統合する必要があります。
androidu 2013年

おそらく、DLNA仕様について調査を行い、それを使用して独自のアプリを作成するか、IP Webcamの開発者に電子メールを送信して支援を求めることができます。
ldam 2013年

1
それをリバースエンジニアリングしますか?:P
mgibson 2013

ええ、他に選択肢はないと思います。
androidu 2013

5

ビデオのストリーミングと再生が可能なAndroid VLCを確認できます。さらに強化したい場合は、GITを確認して何を行っているかを分析できます。幸運を!


3
Android VLCを調べています。それを使用してビデオをストリーミングする方法を教えてください。
user1914692 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.