タグ付けされた質問 「video-streaming」

10
Androidカメラからサーバーへのビデオのストリーミング
サーバーからAndroidデバイスにビデオをストリーミングする方法についてはたくさんの情報を見てきましたが、逆の方法についてはあまり詳しくありません。alaQikです。誰かが私をここで正しい方向に向けるか、これにどのように取り組むかについてアドバイスをくれますか?

4
WiFiを介してAndroidフォン間でライブストリーミングビデオ
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のブログをチェックしてください。彼はこれを実装することについて詳しく説明します。

15
RTSPビデオストリームをWebページに表示するにはどうすればよいですか?
ライブRTSPビデオストリームを提供するIPカメラがあります。VLCメディアプレーヤーを使用して、次のURLを指定することでフィードを表示できます。 rtsp://cameraipaddress ただし、フィードをWebページに表示する必要があります。カメラプロバイダーは私が動作するActiveXコントロールを提供しましたが、それは本当にバグがあり、ブラウザーが頻繁にハングする原因になります。 RTSPをサポートする代替のビデオプラグインを知っている人はいますか? カメラは、H264またはMPEG4のいずれかでストリーミングするように構成できます。

13
ビデオストリームのTCPとUDP
ネットワークプログラミングの試験から家に帰ってきたところ、「ビデオをストリーミングする場合は、TCPまたはUDPを使用しますか?保存されているビデオとライブビデオストリームの両方について説明してください」という質問がありました。。この質問に対して、彼らは単に保存されたビデオのTCPとライブビデオのUDPの短い答えを期待していましたが、私は帰宅時にこれについて考えました、そしてライブビデオのストリーミングにUDPを使用するほうが良いのでしょうか?つまり、帯域幅があり、サッカーの試合やコンサートをストリーミングしているとしたら、本当にUDPを使用する必要がありますか? このコンサートまたはTCPを使用して何かをストリーミングしているときに、パケットを失い始め(あなたと送信者の間のネットワークで何か問題が発生しました)、1分間はパケットを受信しません。ビデオストリームが一時停止し、1分後にパケットが再び通過し始めます(IPが新しいルートを見つけました)。その後、TCPは失われた分を再送信し、ライブストリームを送信し続けます。前提として、帯域幅はストリームのビットレートより高く、pingは高すぎないので、短時間で、失われた1分がストリームのバッファーとして機能します。 、パケット損失が再び発生しても、気付かないでしょう。 さて、ビデオチャット中の遅延がひどいので、常にストリームの最後にいる必要がある、たとえばビデオ会議のように、これが良いアイデアではないいくつかのアプライアンスを考えることができますが、サッカーの試合中、またはコンサート中に、ストリームから1分遅れている場合、何が問題になりますか?さらに、すべてのデータを取得することが保証されているため、後でエラーなく受信できるように保存しておくことをお勧めします。 だから私は私の質問に連れて行きます。ライブストリーミングにTCPを使用することについて知らない欠点はありますか?それとも、帯域幅がある場合は、ネットワーク(フロー制御)に「より良い」という前提で、TCPを使用する必要がありますか?

4
HTML5でロード時に無限ループ動画を再生する
HTML5ページにビデオを配置して、ページの読み込み時に再生を開始し、完了したら、中断することなく最初にループバックしようと思っています。ビデオもする必要があり、NOT、それに関連するすべてのコントロールがあり、どちらかすべての「現代のブラウザと互換性がある、またはポリフィルのオプションがあります。 以前私は経由してこれを行っているだろうFlashとFLVPlayback、私はの明確な舵取りを好むFlashHTML5球に。JavaScript setTimeoutを使用してスムーズなループを作成できると思いますが、ビデオ自体を埋め込むには何を使用すればよいですか?ビデオを思い通りにストリーミングできるものはありFLVPlaybackますか?

8
webRTCとサーバーベースのピア接続を使用してWebカメラとオーディオを録音する方法
ユーザーのウェブカメラとオーディオを録音して、サーバー上のファイルに保存したいと思います。これらのファイルは、他のユーザーに提供できるようになります。 再生に問題はありませんが、コンテンツを記録するのに問題があります。 私の理解では、getUserMedia.record()関数はまだ作成されていません。これまでのところ、提案のみが行われています。 PeerConnectionAPIを使用してサーバー上にピア接続を作成したいと思います。これは少しハッキーだと思いますが、サーバー上にピアを作成し、クライアントピアが送信する内容を記録できるはずだと思います。 これが可能であれば、このデータをflvまたはその他のビデオ形式で保存できるはずです。 私の好みは、実際にはWebカメラとオーディオのクライアント側を記録して、アップロード前の最初の試行が気に入らなかった場合にクライアントがビデオを再記録できるようにすることです。これにより、ネットワーク接続の中断も可能になります。データをキャンバスに送信することで、Webカメラから個々の「画像」を記録できるコードを見たことがあります。これはすばらしいことですが、音声も必要です。 これが私がこれまでに持っているクライアント側のコードです: <video autoplay></video> <script language="javascript" type="text/javascript"> function onVideoFail(e) { console.log('webcam fail!', e); }; function hasGetUserMedia() { // Note: Opera is unprefixed. return !!(navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); } if (hasGetUserMedia()) { // Good to go! } else { alert('getUserMedia() is not supported …


1
NGINX open()が失敗しました(20:ディレクトリではありません)hls vod with secure link module
HLSストリーミングのnginx設定に問題があります。私はkaltura nginx vodモジュールを使用してngx_http_secure_link_module、ストリームを保護するために追加しようとします。奇妙なことに、有効にすると404エラーが発生しますngx_http_secure_link_module(以下のログ)。これは、末尾にindex.m3u8が付いているファイルを見つけられないためだと思いますが、セキュアリンクブロックをコメントアウトすると、正常に動作します。 またlocation ~ \.m3u8$ {}、ブロック内にエイリアスを追加しようとしましたが、機能しませんでした。何が悪いのですか?ストリームを保護するには? 私のストリームリンク: https://stream.example.com/hls/c14de868-3130-426a-a0cc-7ff6590e9a1f/index.m3u8?md5=0eNJ3SpBd87NGFF6Hw_zMQ&expires=1609448340 私のNGINX設定: server { listen 9000; server_name localhost; # root /srv/static; location ^~ /hls/ { # the path to c14de868-3130-426a-a0cc-7ff6590e9a1f file alias /srv/static/videos/1/; # file with cors settings include cors.conf; vod hls; # 1. Set secret variable set $secret "s3cr3t"; # 2. …

2
IntelグラフィックハードウェアH264 MFT ProcessInput呼び出しは、いくつかの入力サンプルを供給した後に失敗します。NvidiaハードウェアMFTでも同じように機能します。
DesktopDuplication APIを使用してデスクトップをキャプチャし、サンプルをGPUでRGBAからNV12に変換して、MediaFoundationハードウェアH264 MFTにフィードしています。これは、Nvidiaグラフィックスとソフトウェアエンコーダーで正常に動作しますが、インテルグラフィックスハードウェアMFTのみが使用可能な場合は失敗します。ソフトウェアMFTにフォールバックすると、同じIntelグラフィックマシンでコードが正常に機能します。また、Nvidiaグラフィックスマシンのハードウェアでエンコードが実際に行われるようにしました。 Intelグラフィックスでは、MFTはMEError("Unspecified error")を返します。これは最初のサンプルが供給された直後にのみ発生し、後続のProcessInputの呼び出し(イベントジェネレーターがMETransformNeedInputをトリガーしたとき)は"呼び出し先は現在それ以上の入力を受け付けていません"を返します。MFTがこれらのエラーを返す前に、さらにいくつかのサンプルを消費することはまれです。この動作は混乱を招くので、イベントジェネレーターがIMFAsyncCallbackを介してMETransformNeedInputを非同期でトリガーする場合にのみサンプルをフィードし、サンプルがフィードされるとすぐにMETransformHaveOutputがトリガーされるかどうかを適切にチェックします。同じ非同期ロジックがNvidiaハードウェアMFTとMicrosoftソフトウェアエンコーダーで正常に動作するとき、これは本当に困惑します。 インテルフォーラム自体にも同様の未解決の質問があります。私のコードは、以下のようにエンコーダーにd3dデバイスマネージャーも設定しているという事実を除いて、インテルスレッドで言及されているものに似ています。 また、他に3つのスタックオーバーフロースレッドがあり、ソリューションが提供されていない同様の問題を報告しています(MFTransformエンコーダー-> ProcessInputがE_FAILを返します& Intel MFTエンコーダーのD11テクスチャからIMFSampleを作成する方法&非同期MFTがMFTransformHaveOutputイベントを送信していません(インテルハードウェアMJPEGデコーダーMFT))。私はこれを改善することなく、可能なすべてのオプションを試しました。 色変換コードは、インテルメディアSDKサンプルから取得されます。ここに私の完全なコードもアップロードしました。 d3dマネージャーを設定する方法: void SetD3dManager() { HRESULT hr = S_OK; if (!deviceManager) { // Create device manager hr = MFCreateDXGIDeviceManager(&resetToken, &deviceManager); } if (SUCCEEDED(hr)) { if (!pD3dDevice) { pD3dDevice = GetDeviceDirect3D(0); } } if (pD3dDevice) { // NOTE: Getting ready for …

3
ffplayでグリーンスクリーンを取得:Live555を使用してRTPストリーム経由でH264ビデオとしてデスクトップ(DirectXサーフェス)をストリーミング
私は、Live555とWindows Media FoundationのWindows 10のハードウェアエンコーダーを使用して、RTPストリーム上でH264ビデオとしてデスクトップ(NV12形式のDirectXサーフェス)をストリーミングしようとしており、ffplay(ffmpeg 4.2)によってレンダリングされることを期待しています。しかし、以下のような緑色の画面しか表示されません、 私は呼ばMFWebCamToRTP mediafoundationサンプル&ハードウェアMFTを用いた符号化のDirectX表面を代わりウェブカムのDirectXの面への入力ソースをLive555では者FramedSourceを実装し、変更するため。 以下は、DirectXサーフェスから入力サンプルをフィードするLive555のdoGetNextFrameコールバックの実装の抜粋です。 virtual void doGetNextFrame() { if (!_isInitialised) { if (!initialise()) { printf("Video device initialisation failed, stopping."); return; } else { _isInitialised = true; } } //if (!isCurrentlyAwaitingData()) return; DWORD processOutputStatus = 0; HRESULT mftProcessOutput = S_OK; MFT_OUTPUT_STREAM_INFO StreamInfo; IMFMediaBuffer *pBuffer = NULL; IMFSample …

1
GOP設定がIntel H264ハードウェアMFTで受け入れられない
問題文: IntelハードウェアMFTはGOP設定を順守していないため、リアルタイムアプリケーションでより多くの帯域幅が消費されます。同じコードがNvidiaハードウェアMFTで正常に機能します。 バックグラウンド: 私は、Windows10マシンでMediaFoundation H264ハードウェアエンコーダーを使用して、DesktopDuplication APIを通じてキャプチャされたNV12サンプルをビデオストリームにエンコードし、LAN上でリアルタイムにストリーミングおよびレンダリングしようとしています。 エンコーダーは出力サンプルを配信する前に最大25フレーム(GOPサイズ)をバッファリングしていたため、最初はエンコーダーでの過度のバッファリングに直面していました。いくつかの調査の結果、CODECAPI_AVLowLatencyModeを設定すると待ち時間が短縮され、品質と帯域幅が少し低下することがわかりました。 CODECAPI_AVLowLatencyModeプロパティを設定すると、パフォーマンスは少し向上しましたが、リアルタイムの要件には達しませんでした。エンコーダーは、少なくともサンプルを生成する前に最大15フレームをバッファリングするように見えます(出力に約2秒の遅延が導入されています)。また、この動作は、低いフレームレートが構成されている場合にのみ顕著になります。60FPSでは、出力はほぼリアルタイムで、視覚的に目立つ遅延はありません。 実際、フレームレートが30FPS未満に設定されている場合にのみ、バッファリングが人間の目で認識されます。また、遅延はFPS構成に反比例して増加します。25FPSでの遅延は数百ミリ秒であり、FPSが10(一定レート)に構成されている場合は最大3秒になります。おそらく、FPSを30(60FPSなど)より大きく設定すると、エンコーダバッファがすぐにオーバーフローして、目立たない遅延のサンプルが生成されると思います。 最近、CODECAPI_AVEncCommonRealTimeプロパティ(https://docs.microsoft.com/en-us/windows/win32/directshow/avenccommonrealtime-property)を試して、帯域幅の消費を避けるために入力フレームレートを下げるときにパフォーマンスが向上するかどうかを確認しましたただし、その呼び出しは「パラメーターが正しくありません」エラーで失敗し ます。 私の実験: 一定のフレームレートを維持し、エンコーダーにリアルタイム出力を生成させるために、同じサンプル(以前に保存されたサンプル)を30FPS / 60FPSの一定のレートでエンコーダーに供給しています。私はこれを最大10FPS(または必要な任意のFPS)でのみキャプチャし、同じサンプルを3回またはEMULATED_FRAME_RATE / ACTUAL_FRAME_RATE比に基づいたレートで正確に供給して30 / 60FPSを偽造することでこれを行っています(例:30 / 10、60 / 15 、60/20)一定の間隔でギャップを正確に埋めます。たとえば、10秒間変化がない場合、同じサンプルを30 * 10回(30FPS)エンコーダーに供給しました。このアプローチについては、いくつかのオープンソースGithubプロジェクトから、またchromiumの実験的なコードサンプルからも学びました。また、私は知らされていました(主にSO、 また、他のフォーラムでは、これがリアルタイム出力のためにエンコーダーをプッシュする唯一の方法であり、それを回避する方法はありません。 上記のアプローチはほぼリアルタイムの出力を生成しますが、以前に保存したサンプルのみをエンコーダーに供給している場合でも、予想よりも多くのデータを消費します。 出力ビットレートは、Intel MFTでは常に350KBpsから500KBpsの範囲にとどまり、NVidia MFT(30FPSおよび500KBビットレート構成)では80KBpsから400KBpsの間で変化します。画面のコンテンツが30FPSで変化するか0FPS(アイドル)で変化するかは関係ありません。この場合、NVidiaハードウェアエンコーダの方がいくらか優れているようです。 実際、画面のアイドル時間中に、エンコーダーは前述の速度よりも毎秒多くのデータを生成していました。より大きなGOPサイズを設定することで、 NVidiaデバイスのデータ消費を削減できました(現在のGOPサイズは16Kです)。ただし、画面のアイドル時のデータ消費量はIntelグラフィックス620ハードウェアでは約300KBps、NVidia GTX 1070(構成:500KBビットレートおよび30FPS)では50KBps〜80KBpsのままですが、これは許容できません。おそらく、インテルのハードウェアMFTはGOP設定をまったく順守していないか、改善が目立ちません。 また、非常に低いビットレートを設定することで、IntelとNvidiaのハードウェアでアイドル時間のデータ消費をそれぞれ〜130KBpsと〜40KBpsに下げることもできましたが、これも許容できないため、ビデオ品質も低下します。 入力サンプル間で変更が発生しなかった場合に、最大10KBps未満の出力を生成するようにエンコーダーを構成する方法はありますか?変更が発生しない場合、私は実際には〜0KBの出力を目指していますが、〜10KBpsはある程度許容可能です。 更新: 私は、以下に、いくつかのパラメータを微調整することにより、NVidiaのMFTのアイドルタイムデータの消費量をダウンさせることができるよ400キロバイトのビットレート設定で〜20kbpsの、そして以下の100キロバイトのビットレート設定で〜10KBps。これは説得力があります。ただし、同じコードで同じエンコーダ構成を使用すると、Intelマシンでは20〜40倍のデータが生成されます。インテル(インテルグラフィックス620)はGOP設定を順守していません。私はGOPを256からINT_MAXの間で変化させてみましたが、IntelハードウェアMFTの出力では何も変化していないようです。 アップデート2: エンコーダープロパティで遊んだ後(eAVEncCommonRateControlMode_CBRの代わりにeAVEncCommonRateControlMode_UnconstrainedVBRでCODECAPI_AVEncCommonRateControlModeを構成しただけです)、画面のアイドル時にインテルMFTが3KBpsデータを生成することがわかりましたが、最初の数秒間だけ(おそらく約3〜8秒) 、それから同じ話に戻ります。数秒後、エンコーダはサンプルと比較するキーフレームへの参照を失い、その時点以降は回復していないようです。GOPが16/128/256/512/1024でもINT_MAXでも、動作は同じです。 エンコーダ構成: リファレンス:http : //alax.info/blog/1586 const int EMULATED_FRAME_RATE = …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.