RTMP雑談(上)

cho

IPC開発中にRTMP(S)の理解と解決する方法、手段を共有させていただきます。

■RTMP(S)は何?

  RTMPはReal-Time Messaging Protocolの省略です。RTMPとは、米アドビ(Adobe)社の「Flash」で利用できるプロトコル(通信規約)の一つで、動画や音声のストリーミング配信・再生を行うためのもの。サーバとクライアントの間で連続的にメディアデータの伝送を行うことができる。

  このような伝送方式は「ストリーミング」(streaming)と呼ばれ、再生開始時に終わりが決まっていない生中継型の放送・配信や、通話型のリアルタイムな双方向コミュニケーションなどのシステムで特に有用となる。

  RTMPSはSSL/TLSで暗号化されたHTTPSを介してTCPの443番ポートで通信する拡張仕様です。

■RTMP(S)の特性は何?

  下記が特性の概要です。

  ・オーディオコーデック: AAC、AAC-LC、HE-AAC+ v1 & v2、MP3、Speex

  ・ビデオコーデック: H.264、VP8、VP6、Sorenson Spark®、スクリーンビデオ v1 & v2

  ・メリット: 低遅延で最小限のバッファリング

  ・デメリット: 視聴体験の品質やスケーラビリティが最適化されていない

  ・遅延: 3 秒

■RTMP(S)の構成は何?

  今のIPC製品はEncoderが全部カメラのSocに内臓されています。カメラ側がRTMPストリームをMediaServerに流すことになっています。携帯側かPC側でrtmpを見るために、カメラのrtmpのストリームとrtmpサーバーが要ります。これからカメラのrtmpとrtmpサーバーを簡単に紹介します。

■IPC側のRTMPを流す方法は何?

  二つの方法があると思います。OpenSourceのLibで実現するとFFMPEGを使う方法です。では二つの方法を簡単にご紹介します。

 ・OpenSourceのLibを使って実現する

  現状有名なLibはlibrtmpです。下記のアドレスからコードを取得できます。

  https://github.com/ossrs/librtmp

  それをCrosscompileしないといけません。下記はコマンドの例です。

        make CROSS_COMPILE=arm-none-linux- INC=-I/my/cross/includes

  ※OpensslとZlibが必要です。自分でビルドしないといけない可能性があります。

  Librtmpを使う概要:IPCからencodeしたH264のstreamを取得して、H264のデータを解析して、naluをAVCのフォマートに変換して、通知する。下記は使用例のサンプルです。

  https://gitee.com/gitee.thomas/librtmp_send264_linux

  もう一つLibはsrs_librtmpです。このlibの特徴はカメラからEncodeしたH264をそのまま使ってAVCフォマートに変換せずrtmpを実現できます。制限としてはrtmpsがサポートされていません。下記からコードを取得できます。※実際はこのLibはSRSサーバの付属品です。

  https://github.com/ossrs/srs

  ビルド方法:https://github.com/ossrs/srs/wiki/v3_EN_SrsLibrtmpにあります、サンプルコードも一緒にビルドされます。

 ・FFMPEGを使う

  Videoのファイルをrtmpサーバーに流す方法は下記です。

  ffmpeg -i ${input_video} -f flv rtmp://${server}/${liveName}/${streamName}

  

最後、ありがとうございました。

今度はRTMP雑談(下)でRTMPサーバー構築について共有させていただきます。

最新情報をチェックしよう!

choの最新記事8件