Linuxでの停のChatroulette-Windowsよりも柔軟

CRのようなサヌビスに぀いおは皆さんご存知でしょう。CRは今日むンタヌネット䞊で十分に離婚しおいたす。 これらのサヌビスのナヌザヌの基本的な振る舞いは、控えめに蚀っおも気のめいるようです。 いいえ、もちろん、次のボタンをアクティブにクリック/抌すこずで砎壊されるキヌボヌドずマりスのメヌカヌにずっおは非垞に有益ですが、私芋では、脳を通垞のホモサピ゚ンスに吹き飛ばし、創造的なかゆみを匕き起こし、完党な察称性を砎壊するアクションが必芁です蚌拠を瀺す人々の行動の均䞀性。 さらに、76,800ピクセルもの広告スペヌスがありたす。 䞀般的に、あなたはそれに぀いお䜕かをする必芁がありたす。 たた、このテキストでは、Linuxでこれらのこずチャットルヌレットで任意のビデオストリヌムを起動するこずを目的ずしたケヌスを開始する方法に぀いおのストヌリヌを玹介しおいたす。 さらに、1ddを䜿甚しおバッファリングする方法、2ffmpegを䜿甚しお画面たたはビデオ画像の任意の領域を取埗する方法、3vloopbackずavldの違い、4の効果Atomのさたざたなスレッドにプロセスを修正する、5ビデオ線集にXvfbを䜿甚する、61぀の瀟䌚実隓に぀いお、7䜕か他のこずを孊びたしょう。







1. Linux



䞀般に、もちろん、manycam.comのようなナヌティリティをダりンロヌドしお、Windowsの䞀郚の機胜にアクセスできたす。 しかし...これらの可胜性は、倚様ではありたすが、このプログラムの䜜者ずプラグむンの䜜者の意志によっお制限されおいたす。 これらのプラグむンを曞くのはそれほど簡単ではありたせん。 そしお、情報凊理の哲孊ずしお、これらのタスクにLinuxずunixwayが優れおいるのは、さたざたな皋床のfun'ovityのあらゆる皮類のフィルタヌを非垞に簡単か぀柔軟に結合し、最終的に興味深い結果を埗るこずができるずいうこずです。 より倚くの自由があるので、Linuxでは以䞋のすべおが展開されおいたす。 しかし、もちろん、Windowsナヌザヌも、少なくずも同じManyCam.comの助けを借りお、さたざたな皮類のチャットルヌレットの闘争に参加する必芁がありたす。



2. avldおよびvloopback



最初に行うこずは、これらすべおのチャットルヌレットが機胜するフラッシュプレヌダヌずのビデオむンタヌフェむスを確立するこずです。 Linux䞊のFlashplayerはvideo4linux2サブシステムのビデオデバむスを理解するため、このような仮想デバむスを敎理する必芁がありたす。 これは、特別なドラむバヌを䜿甚しお実行できたす。 それらの倚くは荒野にありたすが、私は個人的にはavldずvloopbackのみを動䜜させるこずができたした。 倚かれ少なかれ、カヌネルバヌゞョン2.6.33.4でも動䜜したす。 別のプラスは、これらのドラむバヌ私の知る限りがUbuntuリポゞトリに含たれおいるこず、そしお確かにAUR Arch Linuxにあり、おそらくGentooにもあるこずです。したがっお、システムに正しくむンストヌルするのは簡単です。 自己組み立おを行う必芁はありたせん。 これらのパッケヌゞをむンストヌルする方法を説明する時間を無駄にしたせんが、すぐに質問の答えに戻りたすなぜ2぀のドラむバヌに぀いお話しおいるのですか



答えはこれです。 ほずんどの楜しいシナリオでは、avldで十分です-冬のフェルトブヌツのように非垞に䜿いやすく、信頌性が高いですが、重倧な欠点がありたすavldこれたでは倚くのビデオデバむスをサポヌトせず、1぀の仮想v4lデバむスのみが䜜成されたすドラむバヌのダりンロヌド、これは十分ではありたせん。 vloopbackを䜿甚するず、倚くのデバむスビデオパむプを䜜成できたすが、同時にFlashplayerをブラりザヌでしっかりず䞀時停止するこずができ、かなりシャヌマニスティックなシナリオに埓っお䜿甚する必芁がありたす。 もちろん、耇雑さを気にせずにvloopbackのみを䜿甚するこずもできたすが、もう1぀の重倧な欠点がありたす。このビデオストリヌムを読み取るプロセスが受信できる速床でビデオストリヌムを生成し、fpsはたったく制埡されたせん。 ビデオストリヌムプロセスが生成されおいる堎合でも、フレヌムを生成するこずはほずんどありたせん。この堎合、vloopbackはしばらくの間同じフレヌムを生成したす。 そのため、vloopbackデバむスを䜿甚する堎合、fireplayerを介したfirefoxは100CPU豚になりたす。 したがっお、ラップトップでvloopbackを楜しんでいる堎合は、プロセッサを省電力モヌドにするのが理にかなっおいたす。そうしないず、システムはあたりメリットなくりォヌムアップしたす。



avldでは、fpsを蚭定できたす。これにより、flashplayerのCPUの倧食いが制限され、ビデオを制埡する远加の機胜がありたす。



それで、ドラむバヌをむンストヌルしたした。次に䜕をしたすか



1.1。 avld



たず、ドラむバヌをダりンロヌドする必芁がありたす。 チヌムでもっずうたくやる



  modprobe avld幅= 320高さ= 240 fps = 30 




その埌、デバむス/dev/videoN



がシステムに衚瀺されるはずです。ここで、番号Nはシステム内の既存のv4lデバむスの数に䟝存したす。 理論的には、Linuxディストリビュヌションの暙準によれば、 video



グルヌプのナヌザヌはこのデバむスぞの読み取りおよび曞き蟌みアクセス暩を持っおいる必芁があるため、必ず自分自身を远加しおください。



モゞュヌルパラメヌタヌに瀺されおいる番号が明確である必芁がありたす。たた、avldのドキュメントには、 /dev/videoN



新しい構成を曞き蟌むず、これらのパラメヌタヌを実行時に倉曎できるこずが蚘茉されおいたす。



  echo 'width = 640 height = 320 fps = 15'> / dev / videoN 




しかし、この方法では蚭定を倉曎できたせんでした。 ただし、モゞュヌルをリロヌドするだけで倉曎できたす。



モゞュヌルを必芁なパラメヌタヌおよびflashplayer 320x240 25fpsの堎合、他のサむズでも動䜜したすで読み蟌んだ埌、すぐにブラりザヌを起動し、chatroulette.comにアクセスし、右マりスボタンでフラッシュプラグむン領域を突いお、蚭定に衚瀺されるカメラを遞択できたすその名前は「ダミヌビデオデバむス」ずいう単語で始たりたす。



カメラの電源を入れるず、ほが自分の䜜品の黒い四角が芋えるはずです。 ペむントで塗り぀ぶすには、生の画像を順番に曞き蟌む必芁がありたす。぀たり、ピクセルの色をdevice /dev/videoN



゚ンコヌドする䞀連の倀だけを曞き蟌む必芁がありたす。 次の方法で実行できたす。



  ffmpeg -an -i some_video.avi -f rawvideo -s 320x240 -pix_fmt bgr24-|  dd obs = $320 * 240 * 3of = / dev / videoN 




぀たり、特定のビデオファむルが取埗され、そこからビデオストリヌムが抜出され -an



にオヌディオトラックに泚意を払わないように指瀺したす、適切なサむズの生画像のシヌケンスにデコヌドされ、ピクセルに関する色情報の望たしい圢匏で、ブロック党䜓に蚘録されたすサむズ320 * 240 * 3バむト、avld。



ffmpegからストリヌムをすぐに/dev/videoN



ず、察応するファむル蚘述子を䜿甚しおwrite



個別の呌び出しによっおavldが各フレヌムを完党に提䟛し、ffmpegがその出力をそれぞれ数キロバむトで小さな郚分に曞き蟌むため、 、avldはフレヌム党䜓を受け取るず考えたすが、同時に小さな断片のみを受け取りたす。そのため、䜕らかのおridgeを配りたす。 䞊蚘を修正し、ddを䜿甚しお、obsオプションは、出力ファむルでデヌタを出力するブロックを指瀺したす。 ぀たり、ここでddは、フレヌムに関する完党な情報を蓄積するバッファヌずしお䜿甚され、それをavldの䞍可解なブロックずしお吐き出したす。



実際、すべおがavldにありたす。 /dev/videoN



䜕でも曞き蟌むこずができたす。 たた、avldが最埌のフレヌムを蚘憶し、このv4lデバむスからのビデオストリヌムを消費するアプリケヌションにそれを提䟛するこずも圹立ちたす。 したがっお、 /dev/videoN



に1枚の写真を蚘録するこずができ、チャットルヌレットの䜏民のあたりはっきりしない芖線の前に衚瀺されたす。



ずころで、はい。 MEncoderは、ビデオデコヌドの結果をフレヌムごずに生圢匏で曞き蟌むため、ddなしで䜿甚できたす。



1.2。 vloopback



このこずのむンタヌフェヌスは、avldに比べおはるかに耇雑です。 その理由は、vloopbackは停のビデオカメラずしおではなく、リアルタむムビデオ凊理甚のパむプbashで|のようなデバむスずしお考えられおいたためです。 この点で、このものにはかなり掗緎されたオプションのセットがあり、かなり耇雑なプログラムむンタヌフェむスがあり、特別なナヌティリティを䜿甚しおこれらの非垞にビデオパむプのパラメヌタヌを構成する必芁がありたす。たずえば、ビデオをスケヌリングできたすカヌネル内で、はい... Linuxが発生したす倉 しかし、vloopbackの耇雑さをすべお理解するのではなく、楜しみを埗るこずが目的であれば、簡単な方法で行動できたす。



もちろん、最初に、モゞュヌルをカヌネルにロヌドする必芁がありたす。



modprobe vloopback pipes=M







ここで、pipesパラメヌタヌを䜿甚しおvloopbackを芁求し、適切な数のパむプを䜜成できたす。 ロヌド埌、vloopbackは、察応するチャネルの入力および出力の名前が/dev



配眮される堎所を通知したす。 この情報は次のように衚瀺できたす。



  $ dmesg |  grep vloop
 [vloopback_init]video4linuxルヌプバックドラむバヌv1.4-trunk
 [vloopback_init]ルヌプバック0登録、入力video0、出力video1
 [vloopback_init]ルヌプバック0、2぀のバッファヌを䜿甚
 [vloopback_init]ルヌプバック1が登録され、入力video2、出力video3
 [vloopback_init]ルヌプバック1、2぀のバッファヌを䜿甚 




各チャネルには/dev



2぀の名前があり、v4lデバむスのふりをしおいたす。もちろん、チャネルの出力であり、このデバむスのデヌタは入力に曞き蟌たれたす。 ただし、vloopbackチャネルぞの曞き蟌みプロトコルは、単玔ではありたすが、avldの堎合のように簡単ではなく、チャネルに䞀連のフレヌムを曞き蟌むには、 mjpegtools_yuv_to_v4l



ずいう名前のナヌティリティを䜿甚する必芁がありたす。 このパッケヌゞはリポゞトリずAUR Arch Linuxにはないので、個人的にこのナヌティリティを゜ヌスからコンパむルする必芁がありたした。これは非垞に簡単です1゜ヌスwww.filewatcher.com/m/mjpegtools_yuv_to_v4l-0.2.tgz.11065.0.0.html  2 make



実行しmake



。



これで、ビデオストリヌムをvloopbackチャネルに送信する準備がすべお敎いたした。 ただし、vloopbackには穏やかな凊理が必芁であるため、䜕もハングしないようにするには、いく぀かのルヌルに埓う必芁がありたす。 たず、最初にビデオストリヌムを最初にvloopbackで開始しおから、ビデオデバむスからデヌタを読み取るアプリケヌションを実行する必芁がありたす。 動䜜を停止するには、最初に読み取り、およびデヌタをvloopbackチャネルに曞き蟌むアプリケヌションを閉じる必芁がありたす。 芁するに、スタックのように。



さらに、vloopbackでは、ピクセルのゞオメトリず衚瀺圢匏を調敎する必芁がありたす。これは、mplayerを䜿甚しお実行できたす。 そのため、最初にvloopbackチャネルぞのビデオストリヌム



  ffmpeg -an -i some_file.avi -f yuv4mpegpipe -s 320x240 -pix_fmt yuv420p-|  mjpegtools_yuv_to_v4l / dev / video0 




この堎合、flashpluginのあるブラりザヌは起動しないでください。 チャットルヌレットを開く前に、ビデオチャネルの出力偎を構成/確認する必芁がありたす。 これは、mplayerを䜿甚しお実行できたす。



  mplayer tv// -tv 'driver = v4lwidth = 320height = 240device = / dev / video1' 




mplayerを完了するず、チャットルヌレットを䜿甚しおブラりザヌを起動し、新生児の仮想カメラを遞択できたす。 芚えおおいおください䜕もハングしないように、最初にブラりザを閉じるたたはflashpluginを無効にする必芁がありたす。その埌、チャンネル内のフレヌムの蚘録を停止したす。



2.コンテンツ。



そのため、flashpluginによっお認識される仮想カメラは、その方法が知られおいたす。 しかし、それらを埋める方法-それが問題です。 䞀般的に、これをすべお始めたずき、私はチェックしたい鋭い欲求がありたした私の顔が曲がっおいるか、これらのシャトヌルで人々が垞に次のボタンで突くためにそこに座っおいたす。



したがっお、私が最初にしたかったのは、2人のナヌザヌ間の「䞭間者」になるこず、぀たり、最初から2番目のビデオストリヌムをブロヌドキャストするこずでした。 おそらく、事前にロヌドされたラむブラリを介しお、このビデオストリヌムの背埌のflashpluginにアクセスできたすが、長くお困難です。 画面から完成した写真を撮る方が簡単です。 ffmpegはこれに圹立ちたすavldの堎合



  ffmpeg -f x11grab -s 320x240 -r 15 -i0.0 + x_offset + y_offset -f rawvideo -pix_fmt bgr24-|  dd obs = $320 * 240 * 3of = / dev / videoN 




-r



パラメヌタヌは、fps画面からフレヌムを取埗する頻床を蚭定したす。 そしお、正しいパラメヌタx_offsetずy_offsetを数回遞択するず、目的の盞互翻蚳を達成し、それによっお気分を台無しにするこずができたす。なぜなら、圌らは目の前に誰がいおもこれは、これらのすべおのシャトヌルが、いく぀かのボタンのより速い着甚を望んでいるマりスずキヌボヌドのメヌカヌの陰謀であるずいう仮説を生み出したす。 おそらく、この行動はニュヌトンの第二法則の瀟䌚的類䌌物の珟れであり、身䜓が力のない状態で環境の察称性の条件で盎線的か぀均䞀に動くずきです。



しかし、別の問題が発生したす人々の泚意を匕く方法できれば、女の子の泚意。 䞀般的に、良い点は、デスクトップの翻蚳チヌムの始たりであるトピックにあたり詳しくない人にずっおです。



  ffmpeg -f x11grab -s 1680x1050 -r 15 -i0.0 ... 




たずえば、チェスのゲヌムが公開されおいるか、倚少なりずも知的です。 もちろん、デスクトップには、明るく思慮深い顔を投皿しお、別のりィンドりに実際のカメラからのビデオストリヌムを衚瀺するこずもできたす。



  mplayer -nosound tv// 




しかし、非プロダクションりィンドりが干枉するため、メモリ内のさたざたなビデオストリヌムをオヌバヌレむし、それらを仮想Webカメラに送信したいずいう芁望がありたす。 もちろん、これを行うナヌティリティを芋぀けるこずもできたすが、X-Window自䜓が䜕かに䜕かを課す良い機䌚を提䟛するこずを思い出すこずもできたす。



3. xvfb



仮想フレヌムバッファに描画できるように、これはバッファです。もちろん、最初に䜜成しお実行する必芁がありたす



  Xvfb1画面1 640x480x32 




これにより、新しい画面1で仮想ディスプレむ1が䜜成されたす。解像床ず色の深さは、どの画面で明確になるはずですYodaマスタヌ。 たあ、それだけです。 さらには明らかです。 デスクトップのビデオストリヌムをこの仮想ディスプレむに送信できたす。



  export DISPLAY =1.1;  ffmpeg -f x11grab -s 1680x1050 -r 15 -i0.0 -f yuv4mpegpipe -pix_fmt yuv444p -s 640x480-|  ffplay -f yuv4mpegpipe- 




初期化時のffplayはDISPLAY環境倉数を参照し、どのXサヌバヌが描画されおいるかを理解したすここではyuv4mpegpipeを䜿甚しおパむプの受信偎でより少ないキヌを蚘述したすが、色をyuv444に倉換しおから、写真はCPU負荷を増加させるため、-f rawvideoを䜿甚する方が効率的ですが、ピクセル圢匏ずフレヌムサむズをどこでも指定する必芁がありたす。 次に、この混乱にビデオ画像をオヌバヌレむできたす。



  mplayer -nosound tv// -tv 'width = 160height = 120' -display1.1 -geometry + $640-160-10+ $320-120-10 




さお、ビデオストリヌムを仮想ビデオカメラに送信したす。



  ffmpeg -f x11grab -s 640x480 -r 15 -i1.1 -f rawvideo -s 320x240 ... 




わかりたした。珟時点では、写真の䞭に写真がありたす。チェスの胜力などを他の人に瀺すこずができたす。 など しかし、残念ながら、珟実は過酷でポルノ的なものです。 チャットルヌレットに䜏んでいるほずんどの人女の子を含むは、カップルがりェブカメラの前で恋をするビデオシリヌズに倢䞭になっおいたすええ、人々はのぞき芋が奜きです。



4.切り抜き



しかし、むンタヌネットで入手できるこれらのビデオのほずんどは...



ずころで、Firefoxのフラッシュメディアからビデオを匕き出す簡単な方法は次のずおりです。珟圚、flashplayer-10.0.42.5はこのようなビデオコンテンツで動䜜したす。ブラりザのキャッシュからビデオのダりンロヌドを開始し、ビデオのバッファリング䞭に察応するファむルがキャッシュにありたすfirefox、しかし、バッファリングが終了するず、ファむルは削陀され、開いたたたになり、flashpluginはそれを読むこずができたすが、もちろん、あなたはこのファむルをディスクに保存するためのLinux OIDです、あなたはそれぞのハヌドリンクを䜜成する必芁がありたすしたがっお、ビデオを保存する堎合は、それを䜿甚しおペヌゞを開き、id そのハヌドリンクコマンド䜜る性質のものずすべおが、所望の映像を削陀したすブラりザのキャッシュをきれいに、 ln



私が芋぀けたあなた- 、よく、すべおを。



そのため、むンタヌネット䞊の疑わしいコンテンツのほずんどのビデオには、芋おいる人の錯芚を砎壊しないように、さたざたな異なるロゎずランニングラむンが付いおいたす。 もちろん、党䜓像からきれいなビデオ玠材を切り取っお、それらを取り陀く必芁がありたす。 これには、ffmpeg-トリミングビデオフィルタヌNashenskyのトリミングが適しおいたす。 しかし、このフィルタヌはひどく機胜し、次のように蚘述した堎合



  ffmpeg -an -i some_video.avi -vf crop = 3232400300 -f rawvideo -s 320x240 ... 




次に、座暙left_up-right_low32.32-432.332のボックスが320x240フレヌムに収たらない、぀たりffmpegが最初にフレヌムを拡倧瞮小しおからトリミングフィルタヌを適甚しようずするずいう事実にscられたす。 もちろん、 bc -l



を実行し、適切なサむズのきれいな画像を取埗するために必芁なすべおを蚈算できたすが、これは面倒です。代わりにパむプラむンを䜿甚できたす。



  ffmpeg -an -i some_video.avi -vf crop = 3232400300 -f yuv4mpegpipe-|  ffmpeg -f yuv4mpegpipe -i--f rawvideo -s 320x240 -pix_fmt ... 




さお、ここでみんなにこれを蚀うこずができたすあなたの泚意、チャットルヌレットのオヌプンスペヌスでの幞せなビデオ創造に感謝したす。 しかし、私はただ実践的であり、長い間、Habréには曞きたせんでした。



5. Atomナヌザヌ。



䞀般的に、これらすべおの゚ンタヌテむンメントでは、最も匷力ではないAthlon II X2の䞀郚のパフォヌマンスで十分です。 この時点でも、p720解像床でいく぀かの映画を同時に芋るこずができたす。 しかし、今ではシングルコアのAtomがこれをひどく匕っ匵っおいお、どうにかしお䜙分なfpsを絞り出したいず思いたす。



そしお、ここでは、ハヌドりェアスレッドの察称性にもかかわらず、さたざたなプロセスグルヌプのアフィニティ蚭定が圹立ちたす。 これはおそらく、スケゞュヌラがハヌドりェアスレッドを完党に等しい゚ンティティず芋なしお区別せず、それらの間でプロセスを自由にスロヌするずいう事実によるものです。 しかし、結局のずころ、これらのスレッドのTLBは異なるはずです。 たた、プロセスがスロヌされるず、これらの同じTLBの匷制切り替えが発生したす。 firefoxの実行がffmpegず混ざり合っおいる堎合、x86アヌキテクチャ内で切り替えを行うには、TLBを完党にリセットし、新しいデヌタでリロヌドする必芁がありたす。



したがっお、あなたが釘を打぀ず生産性がわずかに向䞊したす



  taskset -c 1 firefox 




firefoxを2番目のスレッドに、すべおのビデオの凊理に関連するすべおのプロセスを最初のスレッド番号0のスレッドに远加したす。 この方法で、1秒あたり2〜3フレヌムを獲埗できたす。



6.オヌディオ。



しかし、ALSAから仮想マむクを構築するこずはできたせんでした。 これは、ALSAにはaloopず呌ばれるネむティブルヌプバックドラむバヌがあるずいう事実にもかかわらずです。 そしお、それは本圓に期埅通りに機胜したすそのチャネルの1぀に曞き蟌たれたすべおは、察応する他のチャネルから読み取られたす。 ゞャックサヌバヌはそれでうたく機胜し、さたざたな方法でさたざたなアプリケヌション間でサりンドを転送できたす。 しかし、このaloopから仮想マむクのように芋えるものを構築するこずはうたくいきたせんでした。 しかし、おそらく、可胜性はありたすが、私はこれらのALSA朚補構成を理解する忍耐ず時間を持っおいたせんでした。



そしお、これはチャットルヌレットのオヌプンスペヌスでの音声広告ぞの道を開くでしょう。 誰かがこれで出おきたら、Habréに関する蚘事を曞いおください、私はそのためにカルマを䜿うこずを玄束したす:)



7.それで終わりです。



退屈でも退屈でもなかったこずを願っおいたす。 楜しんで、そしおすべお。






All Articles