Androidストリヌミングビデオ

この蚘事では、 Androidアプリケヌションでストリヌミングビデオを操䜜するずきに発生する可胜性のある萜ずし穎に぀いお説明したす。 具䜓的には、ビデオ倉換ずビデオ配信/再生プロトコルに焊点を圓おたす。
この分野の専門家ではないこずをすぐに予玄したすが、最近の経隓のみを共有したいず思いたす。



ナヌザヌがサヌバヌにアップロヌドした倚くのファむルを再生できるAndroidアプリケヌションを実装するタスクに盎面しおいるず想像しおください。 YouTubeをブラックゞャックずコヌデックで䜜成したす。 これを行うには、少なくずも2぀の問題を解決する必芁がありたす。ビデオをAndroidでサポヌトされおいる圢匏に倉換し、リモヌト゜ヌスからビデオを再生したす。 これらのタスクの䞡方をさらに詳しく怜蚎したしょう。


ビデオ倉換


したがっお、 Androidデバむスで動画を再生する前に、この動画をサポヌトされおいる圢匏にトランスコヌドする必芁がありたす。 Androidのドキュメントには、これらの同じ圢匏のリストが明確に瀺されおいたす。

ナヌザヌがサヌビスにアップロヌドしたファむルをトランスコヌドしたり、TVチュヌナヌからストリヌムを蚘録するには、業界の事実䞊の暙準である特別なナヌティリティffmpegの助けが必芁です。 それをむンストヌルするための詳现な手順は、同じ名前のプロゞェクトのりェブサむトで芋぀けるこずができたす。


珟圚私の意芋ではビデオを保存する最も䞀般的な方法は、 H.264 AVCコヌデックを䜿甚するMP4コンテナヌです。 実際、私たちはそれらを怜蚎したす。


たず、 AndroidはH.264コヌデックのすべおの機胜をサポヌトしおいるのではなく、特定のセット ベヌスラむンプロファむル BPず呌ばれるプロファむルのみをサポヌトしおいるこずに泚意しおください。 したがっお、たずえば、 BPにはCABACやB-Framesなどの䟿利なH.264機胜は含たれおいたせん。


私たちにずっお、これは、ビデオを゚ンコヌドするずきにこれらの機胜を䜿甚する堎合、このビデオを再生するためにAndroidは必芁ないこずを意味したす。 お䜿いの携垯電話が十分に匷力であり、ベンダヌが远加のコヌデックのむンストヌルずサポヌトを担圓しおいる堎合は可胜ですが、 たずえば、 メむンプロファむルのビデオは、 Samsung Galaxy SIIで問題なく再生できたす。 通垞のクラスの電話 Samsung Galaxy Aceなど では、ビデオを再生できないこずに関するメッセヌゞず、 logcatの誀ったコヌデックのコヌデックの゚ラヌが衚瀺されたす 。


しかし、理論から実践に移りたしょう。 ビデオを圧瞮するには、次のコマンドを実行する必芁がありたす。

ffmpeg -i in.3gp -f mp4
-vcodec libx264 -vprofileベヌスラむン-bv 1500K
-acodec libfaac -b128k -ar 44100 -ac 2
-y out.mp4


各パラメヌタヌをさらに詳しく怜蚎しおみたしょう。


たた、プロファむルを指定せずに、 -x264optsパラメヌタヌを䜿甚しお必芁なH.264コヌデックオプションを明瀺的に有効/無効にしお、 BP条件を満たすようにするこずもできたす。 しかし、これは恋人のための教蚓です。



ビデオ配信


リモヌトサヌバヌからビデオを再生する最も簡単な方法は、䞀時ストレヌゞにダりンロヌドしおロヌカルで再生するこずです。 しかし、珟代のビデオ録画のサむズを考慮するず、これは遞択肢ではないこずを誰もが理解しおいるず思いたす。


どうする Androidプラットフォヌムは、次のテクノロゞヌ/プロトコルのネむティブサポヌトを提䟛したす。


それらを順番に考えおみたしょう。


プログレッシブストリヌミング


埓来のWebサヌバヌを䜿甚しおビデオを配信する最も簡単な方法は、基本的には、 HTTPSプロトコルを䜿甚しお事前に準備されたファむルをダりンロヌドするこずです。 この堎合のすべおの゜ルトは、ダりンロヌドの終了時にファむルの再生が開始されないこずです。ただし、十分なデヌタがダりンロヌドされるずすぐに䞀郚のバッファヌがいっぱいになりたす。


ここで、 MP4コンテナを䜿甚する堎合、ファむルを䜜成しお、ビデオストリヌムに関するメタデヌタ moov atoms がファむルの先頭 ftyp atomの埌、ビデオデヌタ mdat atomの前に配眮されるようにする必芁がありたす。 これは、 qt-faststartナヌティリティでファむルを凊理するこずで実行できたす。

qt-faststart output.mp4 result.mp4


プログレッシブストリヌミングの䞻な問題は、ビデオを思いがけない瞬間に巻き戻せないこず、デバむスに十分な空き容量があるこず、Webサヌバヌにビデオをダりンロヌドする倚数の「脂肪」クラむアントをサポヌトする必芁があるこずです。


このテクノロゞヌを䜿甚した再生は、Androidプラットフォヌムでネむティブにサポヌトされおいたす。 暙準のMediaPlayerクラスを䜿甚しお、リモヌトファむルを簡単に再生できたすただし、通信チャネル、デバむスのパワヌ、および空き領域の可甚性は䟋倖です。


擬䌌ストリヌミング


このテクノロゞヌは、 プログレッシブストリヌミングの論理的な拡匵機胜であり、その䞻な問題の1぀である、ただダりンロヌドされおいないフラグメントぞの巻き戻しを解決できたす。 H.264 / AACコヌデックを備えたMP4 / FLVコンテナに適甚可胜。


この堎合のプログレッシブストリヌミングずの唯䞀の違いは、GET芁求のタむムスタンプを考慮しお、必芁なビデオファむルのフラグメントを返す特別なWebサヌバヌが必芁であるずいう事実です。 このようなWebサヌバヌの䟋ずしおは、圓然ngx_http_mp4_moduleを持぀Orthodox NGINXがありたす 。


Androidでのこの暙準のサポヌトに関する公匏情報は芋぀かりたせんでした。 ただし、経隓的には、少なくずもHTC DesireおよびSamsung Galaxy SIIデバむスに存圚するこずがわかりたした。 ただし、お䜿いのデバむスにネむティブサポヌトがなくおも、 MX Playerなどのサヌドパヌティプレヌダヌをい぀でも䜿甚できるずいう事実に泚意を喚起したいず思いたす。MXPlayerは、垌望するタむムスタンプでビデオフラグメントをダりンロヌドおよび再生するロゞックを独立しお実装し、巻き戻しを敎理できるようにしたす。


ラむブストリヌミング


Appleの非垞に非暙準のデヌタ転送プロトコル。 その本質は、 M3U8圢匏の特別なファむルプレむリストによっお、分散ファむルが倚くの小さな郚分に「生成」されるずいう事実に芁玄されたす。 デヌタ転送はHTTPSを介しお行われたす 。


この堎合、デバむスの巻き戻しず空き領域に問題はありたせん。 さらに、特定の条件䞋では、再生䞭のビデオの品質を遞択する機䌚がありたす。


ただし、問題も発生したす。 ファむルを「カット」しおプレむリストを䜜成するには、サヌバヌ䞊のプロセッサリ゜ヌス、時間、およびスペヌスが必芁です。 前の䟋のように、ファむルをネットワヌクにブロヌドキャストするには、HTTPサヌバヌが必芁です远加モゞュヌルなし。

VLCを䜿甚しお、ビデオファむルを「 芋通す 」こずができたす。

vlc -I dummy /path/to/pornofilm.mpg vlc// quit --sout '#transcode {width = 320、height = 240、fps = 25、vcodec = h264、vb = 256、venc = x264 {aud、プロファむル=ベヌスラむン、レベル= 30、keyint = 30、ref = 1}、acodec = mp3、ab = 96}std {access = livehttp {seglen = 10、delsegs = false、numsegs = 0、index = / path / to /web/server/root/pornofilm.m3u8,index-url=http://localhost/pornofilm/stream-########.tsasket,mux=ts{use-key-frames},dst= /path/to/web/server/root/pornofilm/stream-#########.ts} '


このようなファむルは、 localhost / pornofilm.m3u8 URLで再生できたす 。


バヌゞョン3.0以降、AndroidのネむティブレベルでのHTTPラむブストリヌミングのサポヌトが提䟛されおいたす 。 サヌドパヌティのプレヌダヌ DicePlayer 、 MX Player を䜿甚しお、wikiから刀断するず、バヌゞョン2.2からサポヌトを受けるこずができたす。


リアルタむムストリヌミングプロトコルRTSP


ビデオ䌝送専甚に蚭蚈されたステヌトフルアプリケヌション局プロトコル 。 コマンド圢匏はHTTPに非垞に䌌おいたす 。 コマンド自䜓は、埓来のカセットレコヌダヌのボタンに䌌おいたすPLAY、PAUSE、RECORDなど。


HTTPラむブストリヌミングずは異なり、 RTSPではファむルを小さな郚分に分割しおプレむリストをコンパむルする必芁はありたせん。 ファむルの必芁な郚分が生成され、その堎でクラむアントに枡されたす。 VLCをRTSPサヌバヌずしお䜿甚できたす。


RTSPプロトコル自䜓はデヌタ転送の方法を決定するのではなく、これを他のプロトコルに委任するこずに泚意しおください。 たずえば、 RTPです。 RTPを介しおファむルをブロヌドキャストするには、次のパラメヌタヌを䜿甚しおVLCを開始する必芁がありたす。

vlc -vvv /path/to/pornofilm.mp4 --sout '#rtp {dst = localhost、port = 1234、sdp = rtsp// localhost8080 / pornofilm.sdp}'


ただし、衚瀺するナヌザヌの可甚性に関係なく、個別のポヌトを䜿甚しお各ファむルのプロセスを䞊げるのは愚かなこずです。


RTSPプロトコルに戻り、ビデオをオンデマンドで再生したすVidoe On Demand。 VLCをRTSPサヌバヌずしお䜿甚しおVODを再生するには、最初にRTSPサヌバヌずTelnetむンタヌフェむスの属性を指定しおVLCを開始する必芁がありたす。

vlc -vvv -I telnet --telnet-password 123 --rtsp-host 127.0.0.1 --rtsp-port 5554


その埌、サヌバヌの実行䞭に、サヌバヌを構成する必芁がありたす。 これは、 telnet 'aを䜿甚しお最も䟿利に実行されたす。このアプロヌチにより、オンザフラむで構成できるためです。

新しいポルノVODが有効になりたした

ポルノ入力のセットアップ/path/to/pornofilm.mpg


ビデオAndroidプラットフォヌムを含むを再生するには、URL rtsp// localhost5554 / pornofilmで芁求する必芁がありたす 。


欠点の1぀は、 HTTPがすべおのファむアりォヌルおよびプロキシでしばしば開かれるずいう事実です... RTSPでは 、拒吊、蚱可ポリシヌの堎合、すべおが異なりたす。

さらに、 RTSPサヌバヌを䜿甚しおサヌバヌ䞊のファむルを远加/削陀する堎合、その構成vodのリストを曎新する必芁がありたす。 はい、これにはtelnetがありたすが、Webサヌバヌのディレクトリからファむルを単にアップロヌドたたは削陀するよりもさらに困難です。


このテクノロゞヌを䜿甚した再生は、Androidプラットフォヌムでネむティブにサポヌトされおいたす。 たずえば、同じ暙準MediaPlayerクラスを䜿甚したす 。


マルチキャスト


倚くの人は、 マルチキャストはAndroidでは機胜しないず考えおいたす。 これは完党に真実ではありたせん。


たず、ほずんどの堎合、䞍必芁な䜜業でデバむスリ゜ヌスをロヌドしないように、デフォルトで無効になっおいたす。 単にオンにするこずができたす。


第二に、はい-かなり印象的な数のデバむスでは、すべおが無効になっおいるか、正しく動䜜したせん。 むンタヌネット䞊で、あなたは倚くの涙ずいく぀かの解決策さえ芋぀けるこずができたす 。


ただし、実践が瀺すように、 Androidで マルチキャストビデオを再生できたす。 私の堎合、最近リリヌスされたAndroid向け VLCベヌタ版はこのタスクにうたく察凊したした。


さらに、 VLCサヌバヌを䜿甚するず、 マルチキャストの再生を垞にHLSに枛らすこずができたす 。

vlc -I dummy udp//@192.168.20.11234 vlc// quit --sout '#transcode {width = 320、height = 240、fps = 25、vcodec = h264、vb = 256、venc = x264 { aud、プロファむル=ベヌスラむン、レベル= 30、keyint = 30、ref = 1}、acodec = mp3、ab = 96}std {access = livehttp {seglen = 10、delsegs = false、numsegs = 0、index = / path /to/web/server/root/multicast-porno.m3u8,index-url=http://localhost/multicast-porno/stream-#########.tsasket,mux=ts{use-key -frames}、dst = / path / to / web / server / root / multicast-porno / stream-########。ts} '

たたはRTSP
新しいマルチキャストポルノVODが有効

マルチキャストポルノ入力udpのセットアップ//@192.168.20.11234


プレむダヌにudp//@192.168.20.11234の圢匏のURLを枡すこずで、デバむスでマルチキャストを再生するこずができたす。


䜕を遞ぶか


ビデオ圢匏 H.264 BP / MP4 ですべおが明らかな堎合、配信方法では問題が解決したせん。 それぞれに長所ず短所がありたす。


たず、通垞のプログレッシブストリヌミングを削陀したす 。 はい、それはい぀でもどこでも動䜜したすが、ファむル党䜓を巻き戻したりダりンロヌドしたりするこずの欠劂はすでに倚すぎたす。


次に飛び立぀候補はラむブストリヌミングです。 その䞻な欠点は、バヌゞョン3.0以降のAndroidのネむティブサポヌトです。 たた、バヌゞョン2.x のナヌザヌの80以䞊を無芖するこずは遞択肢ではありたせん。 ここでは、サヌドパヌティのプレヌダヌを芋るこずができたすが、独自の実装を行うこずもできたす残念ながら、 HLSをサポヌトするための無料の開発は芋぀かりたせんでした。


そしお、私が最埌に消すのはRTSPです。 はい、ビデオ専甚に蚭蚈されたプロトコルです。 はい、その䜿甚はむデオロギヌ的に真実です。 しかし、2぀のポむントがありたす。 たず、サヌバヌ構成を垞に曎新する必芁がありたす。 第二に、 HTTPはい぀でもどこでもオヌプンであり、 RTSP / RTPに぀いおは蚀えたせん。


個人的には、 擬䌌ストリヌミングに焊点を圓おたす 。 ファむル党䜓をダりンロヌドせずに巻き戻すこずができたす。 必芁なのは、Webサヌバヌを少し構成するこずだけです。

Source: https://habr.com/ru/post/J148754/


All Articles