Archive

Posts Tagged ‘PeerCast’

Linux 64bit 版で動作する PeerCast QT をコンパイルする

January 27th, 2012 No comments

概要

64bit版Linuxで動作する PeerCast QT バイナリの作りかたです。

作り方

まずは下記サイトからPeerCast QTのソースコードを取得します。
PeerCast QT

$ wget 'http://mosax.sakura.ne.jp/yp4g/fswiki.cgi?page=PeerCast+Qt'

64bit環境でコンパイルできるようにファイルを修正します。 変更点は以下の通り。

$ git diff
diff --git a/core/common/ogg.h b/core/common/ogg.h
index cc49dea..fba7a4e 100644
--- a/core/common/ogg.h
+++ b/core/common/ogg.h
@@ -19,7 +19,7 @@
 #ifndef _OGG_H
 #define _OGG_H
 
-
+#include <sys/types.h> 
 #include "channel.h"
 // ----------------------------------------------
 class OggPage;
diff --git a/core/common/sys.h b/core/common/sys.h
index 3cd7428..e41cb06 100644
--- a/core/common/sys.h
+++ b/core/common/sys.h
@@ -335,7 +335,7 @@ public:
 //#define _BIG_ENDIAN 1        // qt
 #endif
 
-typedef long long int64_t;
+//typedef long long int64_t;
 
 typedef int (*THREAD_FUNC)(ThreadInfo *);
 #define THREAD_PROC int 

peercast/ui/linux へ移動して make します。

$ cd peercast/ui/linux
$ make
$ make install
$ sudo cp peercast /usr/local/bin

完成!

備考

PeerCastQT開発者さんのサイトはすでに新サイトに移転されているようですが、新サイトではPeerCastQTが公開されていません。消えてしまうと困るのでgithubに野良リポジトリを作りました。

cohakim / PeerCastQT

GistにPeerCastの起動スクリプトもおいておきます。

Categories: 02.Article Tags:

PeerCastを使わずにYPのポートチェックをパスする方法

January 16th, 2012 No comments

概要

iPhoneなどPeerCastが動作しない環境でもYPのチャンネルリストを取得できたら便利だなーと思ったのでやり方を調べてみました。

YPの仕様を把握する

まずはYPの仕様を把握します。KP、CP、TPなど、日本でメジャーなYPは YP4G というオープンソースソフトウェアを土台にしているようです。同サイトでソースコードが配布されているのでダウンロードします。

ダウンロードしたファイルを展開するとyp4gというディレクトリにソースコード一式が作成されます。どうやらPHPで書かれたプログラムのようです。ポートチェック処理はsocketを使って通信していると思われるので、PHPのsocket関数であるfsockopenでプロジェクトを検索します。

検索したところ、yp4g/reload/util.php にそれっぽい処理が記述されているのがみつかりました。

yp4g/reload/util.php

if($use_pcp)
{
  $fp = @fsockopen($addr, $port, $errno, $errstr, $timeout);
  if($fp)
  {
    stream_set_timeout($fp, 1);
    
    fwrite($fp, "\x70\x63\x70\x0a\x04\x00\x00\x00\x01\x00\x00\x00\x68\x65\x6c\x6f\x00\x00\x00\x80");
    $id = fread($fp, 4);
    
    fclose($fp);
    
    if($id == "oleh")
      return true;
    else
      return false;
  }else
    return false;
}

socketを開いて「\x70\x63\x70\x0a\x04\x00\x00\x00\x01\x00\x00\x00\x68\x65\x6c\x6f\x00\x00\x00\x80」という文字列を送信し、レスポンスの先頭が「oleh」という文字列ならチェックが成功するようです。

Rubyを使って仕様を確かめる

PeerCastが実際に調べた通りの動作をしているかRubyを使って確かめてみます。pry(irb)を起動して下記のスクリプトを実行します。(PeerCast本体を起動しておいてください)

pry(main)> require 'socket'
=> false
pry(main)> s = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
=> #<Socket:fd 5>
pry(main)> sockaddr = Socket.sockaddr_in(7144, '127.0.0.1')
=> "\x10\x02\e\xE8\x7F\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"
pry(main)> s.connect(sockaddr)
=> 0
pry(main)> s.write "\x70\x63\x70\x0a\x04\x00\x00\x00\x01\x00\x00\x00\x68\x65\x6c\x6f\x00\x00\x00\x80\r\n"
=> 22
pry(main)> s.recv(1024)
=> "oleh\x05\x00\x00\x80agnt\x10\x00\x00\x00PeerCast/0.1217\x00sid\x00\x10\x00\x00\x00\x00]\xF2ug\x9CF\xF3\xEE\x93P>Y\xD4\x90tver\x00\x04\x00\x00\x00\xC1\x04\x00\x00rip\x00\x04\x00\x00\x00\x01\x00\x00\x7Fport\x02\x00\x00\x00\x00\x00quit\x04\x00\x00\x00\xED\x03\x00\x00"
pry(main)> s.close
=> nil

「oleh・・・」というデータが返ってきました。 期待通りの動作をしているようです!

Mac OSX Lion で IPv6 を無効にする

余談になりますが、Mac OSX Lion で IPv6 を無効にする方法を調べたのでメモしておきます。

Mac OSX Lion はデフォルトでIPv6が有効になっていますが、上記RubyスクリプトはIPv6環境では動作しないため、なんらかの対応をする必要があります。RubyにはIPv6対応のSocket APIが存在し、そちらを使うと言う手もあるのですが、面倒そうなので今回はスルーします。単純にOSのIPv6サポートを無効にして対処したいところですが、Mac OSX Lionは環境設定からはIPv6を無効にできなくなったようで、コマンドラインから設定を変更する必要がありました。

Mac OSX Lion で IPv6 を無効にするには、下記コマンドを実行してください。

$ sudo networksetup -setv6off Wi-Fi

iPhoneでsocket通信する

YPの仕様が把握できたので、iPhoneでsocket通信を行う処理を書いていきます。

Cocoaでsocket通信を行うには roustem/AsyncSocket というライブラリを使うのが簡単です。「AsyncSocket.h」と「AsyncSocket.m」をプロジェクトにコピーし、「#import “AsyncSocket.h”」するだけで使えるようになります。AsyncSocketの使い方はライブラリに含まれているEchoサーバのサンプルコードが参考になりました。

とりあえずYPのポートチェックが通ったコードをおいておきます。

YPStub.h

#import <Foundation/Foundation.h>
#import "AsyncSocket.h"

@interface YPStub : NSObject{
  AsyncSocket *_listenSocket;
  NSMutableArray *_connectedSockets;
}
@property (nonatomic, strong) AsyncSocket *listenSocket;
@property (nonatomic, strong) NSMutableArray *connectedSockets;
- (void)start;
- (void)stop;
@end

YPStub.m

#import "YPStub.h"

@implementation YPStub

@synthesize listenSocket = _listenSocket;
@synthesize connectedSockets = _connectedSockets;

- (id)init {
  if((self = [super init])) {
    self.listenSocket = [[AsyncSocket alloc] initWithDelegate:self];
    [self.listenSocket setRunLoopModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
    self.connectedSockets = [[NSMutableArray alloc] initWithCapacity:1];
  }
  return self;
}

- (void)start {
  if(![self.listenSocket acceptOnPort:7144 error:nil]) {
    return;
  }
}

- (void)stop {
  for(NSUInteger i = 0; i < [self.connectedSockets count]; i++) {
    [[self.connectedSockets objectAtIndex:i] disconnect];
  }
  [self.listenSocket disconnect];
}

////////////////////////////////////////////////////////////////////////////////

- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket {
  NSLOG(@"");
  [self.connectedSockets addObject:newSocket];
}

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
  NSLOG(@"%@:%hu",host, port);
  [sock readDataToData:[AsyncSocket ZeroData] withTimeout:1 tag:0];
}

- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag {
  NSLOG(@"");
  if(tag == 1)  {
    [sock readDataToData:[AsyncSocket CRLFData] withTimeout:1 tag:0];
  }
  else if(tag == 2)  {
    [sock disconnect];
  }
}

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
  NSLOG(@"");
  NSString *message = @"oleh\r\n";
  NSData *messageData = [message dataUsingEncoding:NSUTF8StringEncoding];
  [sock writeData:messageData withTimeout:1 tag:2];  
}

- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err {
  NSLOG(@"%@:%hu",[sock connectedHost], [sock connectedPort]);
}

- (void)onSocketDidDisconnect:(AsyncSocket *)sock {
  NSLOG(@"");
  [self.connectedSockets removeObject:sock];
}

@end

アプリにUIWebViewなどを追加して、TPのページを開いてみてください。ポートチェックにパスしているのが確認できると思います。

Categories: 02.Article Tags: ,

iPhoneからPeerCast配信をリアルタイム視聴するためのソリューションまとめ

April 4th, 2011 No comments

iPhoneからPeerCastをリアルタイム視聴するためのソリューションが複数でてきたのでまとめ。 対象アプリは次の3つ。

全てのアプリで配信の視聴には自宅PCへのサーバソフトウェアのインストールが必要となる。

iCastServer

作者: 綾瀬宏美さん アプリプラットフォーム: Web サーバプラットフォーム: Windows 配信視聴に必要な外部アプリ: VLC 1.2以降(現状Nightly Build版のみ存在)

いいところ

導入一番簡単。 jQuery Mobileを使った奇麗なインターフェース。 サーバソフトウェアがタスクトレイに常駐するので邪魔にならない。

わるいところ

jQuery Mobileの動作がちょっと重たく、一度に表示できるチャンネル数が少ない。 サーバ側エンコーダのプロセス管理を手動で行わないといけない。

こんな人におすすめ

PCスキルがそれほど高くない人 軽快な動作や多機能さよりも奇麗なインターフェースを求める人 軽くチャンネルチェックできればいいようなライトなPeerCastユーザ

PecaMatic

作者: 塩化かにみそさん アプリプラットフォーム: ネイティブ サーバプラットフォーム: Windows 配信視聴に必要な外部アプリ: Peca2iPhone, ffmpeg

いいところ

ネイティブアプリなので動作が軽く、検索機能や掲示板の表示機能など多機能。

わるいところ

Peca2iPhone(サーバソフトウェア)導入の敷居がやや高い。 サーバがタスクバーに常駐するので邪魔になる。

こんな人におすすめ

特定のチャンネルをチェックしたり、チャンネルをがっつり楽しみたいPeerCastヘビーユーザ ビジュアル面よりも動作の軽快さを重視する人

MP

作者: cohakimさん アプリプラットフォーム: ネイティブ サーバプラットフォーム: Mac 配信視聴に必要な外部アプリ: PeCaServerPackage, ffmpeg

いいところ

唯一のMac対応。 チャンネル情報の取得だけなら自宅サーバが不要。

わるいところ

配信視聴のためのハードルが一番高い。

こんな人におすすめ

マカーで配信を視聴したい人 チャンネル情報のチェックだけできればいい人

スクリーンショット

iCastServer

PecaMatic

MP

Categories: 02.Article Tags:

PeerCastの視聴環境についてアンケートをとってみた

March 1st, 2011 No comments

概要

開発の参考にするためにとったPeerCast視聴環境のアンケートとその結果です

アンケート: http://t.co/LrXNtcN 結果: http://t.co/msdBpLd

Categories: 01.Diary Tags:

fedora に PeerCast VP をインストールする

March 1st, 2011 No comments

概要

ないと思っていたLinux版PeerCast-VPが普通にあったのでインストールした PeerCast QTのソースコード中にlnixのCUI版がありました

手順

ソースコードをダウンロードしてビルド


$ wget 'http://mosax.sakura.ne.jp/fswiki.cgi?action=ATTACH&page=PeerCast+Qt&file=peercast%2Dqt0014%2Etar%2Egz' -O peercast-qt0014.tar.gz
$ tar xzf peercast-qt0014.tar.gz
$ cd peercast/ui/linux
$ make

ファイルを所定の場所にコピー


$ cp peercast /usr/local/bin/peercast
$ cp -a html/ /etc/peercast/htm

起動スクリプトを作成

/etc/init.d/peercast


#!/bin/sh
#
# peercast - this script starts and stops the peercast-server daemon
#
# chkconfig:   - 85 15
# description:  peercast is a persistent key-value database
# processname: peercast-server
# config:      /etc/peercast.conf
# pidfile:     /var/run/peercast.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

peercast="/usr/local/bin/peercast"
prog=$(basename $peercast)

PEERCAST_CONF_FILE="/etc/peercast/peercast.conf"
PEERCAST_HTML_DIR="/etc/peercast/html"

[ -f /etc/sysconfig/peercast ] && . /etc/sysconfig/peercast

lockfile=/var/lock/subsys/peercast

start() {
    [ -x $peercast ] || exit 5
    echo -n $"Starting $prog: "
    daemon $peercast -d -i $PEERCAST_CONF_FILE -P $PEERCAST_HTML_DIR
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    echo -n $"Reloading $prog: "
    killproc $peercast -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac

起動

sudo /etc/init.d/peercast start
Categories: 02.Article Tags:

iPhoneからPeerCastの動画配信をリアルタイムに視聴する(使ってみようlive segmenter編)

February 24th, 2011 No comments

概要

今回はlive segmenterの使い方の説明です。 live segmenterを使ってPeerCastの配信動画をiPhoneでストリーミング再生できるところまでやりましょう。

事前準備

ffmpeg をパスの通ったディレクトリに配置する。

下記ファイルを同一ディレクトリに配置する。 live_segmenter http_streamer.rb hs_config.rb hs_encoder.rb hs_transfer.rb config_stream.yaml

Apacheの起動

動画を配信するためにHTTPサーバが必要です。今回はOSX付属のApacheを使います。 システム設定のSharingからWeb Sharingを有効にします。

配信プロファイルの設定

配信プロファイルを設定します。下記項目は適宜書き換えてください。 input_location → PeerCastストリーミング動画のURL copy_dev: directory → ユーザのホームディレクトリ/Sitesを設定

config_stream.yaml


temp_dir: '/tmp'
segment_prefix: 'peca_stream'
index_prefix: 'peca_stream'

log_type: 'STDOUT'
log_level: 'DEBUG'

input_location: 'mmsh://127.0.0.1:7144/stream/__CHANGEME__.wmv'
segment_length: 10
url_prefix:
index_segment_count: 15
source_command: 'ffmpeg -i %s -f mpegts -'
segmenter_binary: './live_segmenter'
encoding_profile: [ 'cell_150k' ]

transfer_profile: 'copy_dev'

cell_150k:
  ffmpeg_command: "ffmpeg -er 4 -i %s -f mpegts -acodec libmp3lame -ar 32000 -ab 48k -s 400x224 -vcodec libx264 -b 110k -flags +loop+mv4 -cmp 256 -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 1 -refs 5 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 110k -maxrate 110k -bufsize 110k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 16:9 -r 10 -g 30 -async 2 - | %s %s %s %s %s"
  bandwidth: 158000

copy_dev:
  transfer_type: 'copy'
  directory: '/Users/__CHANGEME__/Sites'

ソースコードの修正

input_location の設定をうまく解釈してくれないようなのでソースコードを修正します。 hs_config.rb の下記行をコメントアウトします。

hs_config.rb


  # if !File.readable? config['input_location']
  #   log.error("The input file can not be read: #{config['input_location']}")
  #   raise
  # end

ストリーミングの開始

ruby http_streamer.rb config_stream.yml

~/Sites 以下にファイルが作成されたら成功です。

動画の再生

iPhoneからSafariでMacにアクセスし、プレイリストファイル(拡張子がm3u8)を読み込みます。

http://11x.15x.6x.25x/~cohakim/peca_stream_multi.m3u8

動画が再生されれば成功です!

関連リンク

iPhoneからPeerCastの動画配信をリアルタイムに視聴する

Categories: 02.Article Tags: ,

iPhoneからPeerCastの動画配信をリアルタイムに視聴する(使ってみようFFmpeg編)

February 24th, 2011 No comments

概要

今回はFFmpegの使い方の説明です。FFmpegを使ってPeerCastで配信されている動画のストリーミングデータを受信し、適当なフォーマットにエンコードして保存するところまでやりましょう。

チャンネル情報からストリーミング動画のURLを取得する

まずはストリーミング動画のURLを取得しましょう。 PeerCast Qtを立ち上げ、適当なYPを開きます。チャンネル数の多いCPがおすすめです。

適当なチャンネルを選んでチャンネルの配信URLを確認します。(しばらくテストに使うので長時間配信しそうなチャンネルを選びましょう)

http://localhost:7144/pls/8047B735E1533111FF16998637DXXXX?tip=6x.3x.3x.5x

この配信URLにアクセスすると次のようなURLが取得でき、これがストリーミング動画のURLとなります。

mmsh://127.0.0.1:7144/stream/8047B735E1533111FF16998637DXXXX.wmv

FFmpegで受信する

まずは下記コマンドを実行してみましょう。動画のURLは書き換えてください。

ffmpeg -i mmsh://127.0.0.1:7144/stream/8047B735E1533111FF16998637DXXXX.wmv -f mpegts -

動画のメタデータが表示されたあと、ストリームデータがつらつらと表示されれば成功です。 何も表示されずに画面がとまったまま動かない場合は配信が終了している可能性があるのでチャンネルを変えてみてください。

コマンドの意味は次の通り。 -i 動画ファイル/URL -f フォーマットの指定 mpegts形式 最後の「-」は出力先の指定で標準出力を指定しています

FFmpegでエンコードする

受信ができたので次はエンコードして保存してみましょう。

まずは下記コマンドを実行してみましょう。動画のURLは書き換えてください。

ffmpeg -i mmsh://127.0.0.1:7144/stream/8047B735E1533111FF16998637DXXXX.wmv -vcodec libx264 -b 320k -fpre "/opt/local/share/ffmpeg/libx264-default.ffpreset" -acodec aac -strict experimental -f mpegts ~/Desktop/test.mpeg

デスクトップに動画が保存されていたら成功です。

コマンドの意味は次の通り。 -vcodec ビデオコーデックを指定 -b ビットレートを指定 -fpre エンコードのプリセットファイル指定 -acodec オーディオコーデックを指定 -strict experimental 標準準拠度を指定

まとめ

FFmpegを使ってPeerCastで配信されている動画のストリーミングデータを受信し、適当なフォーマットにエンコードして保存するところまでできました。 実際に運用するには、iPhoneに適したフォーマットや、モバイル通信でも使えるビットレートなどを考慮してエンコード形式を設定しなければいけませんが、 次回説明するlive_segmenterは、それらをテンプレートとしてもっていて複数のテンプレートを簡単に切り替えられるようになっています。

参考リンク

ffmpeg – Wikipedia FFmpeg Documentation

関連リンク

iPhoneからPeerCastの動画配信をリアルタイムに視聴する

Categories: 02.Article Tags: ,

iPhoneからPeerCastの動画配信をリアルタイムに視聴する(環境構築編)

February 23rd, 2011 No comments

概要

iPhoneからPeerCastの動画配信をリアルタイムに視聴する。 環境構築編です!今回の記事はMac OS X が対象です。

中継サーバの環境について

中継サーバにはWindows機もしくは(Mac OS Xをのせてた)Macを使います。Linuxマシンは中継機には適しません。 日本のメジャーな配信にはPeerCast-VPという改造版のPeerCastクライアントが使用されているようです。ポート0の排除機能など有用な機能が追加されているバージョンですが、PeerCast-VP版以外のクライアントも排除してしまうようです。 WindowsおよびMacには対応クライアントが存在していますが、Linuxにはノーマルのクライアントしか存在しておらず、視聴できるチャンネルが限られてしまいます。

インストールするソフトウェア

FFmpeg HTTP-Live-Video-Stream-Segmenter-and-Distributor PeerCast Qt

インストール

FFmpegのインストール

MacPortsを使ってインストールします。MacPortsにはFFmpegのパッケージが2種類存在しています。

  • ffmpeg
  • ffmpeg-devel

ffmpegの方はPeerCastで使われている配信プロトコルmmshに非対応なので、 ffmpeg-develの方をインストールしましょう。

$ sudo port install ffmpeg-devel

なおffmpeg-develインストール時に既にffmpegをインストールしていた場合、ffmpegをdeactivateする必要があります。

念のため対応フォーマットとプロトコルを確認しておきましょう。


$ ffmpeg -formats
$ ffmpeg -protocols
HTTP-Live-Video-Stream-Segmenter-and-Distributor

本家のコードがRuby1.9系に非対応だったため、下記リポジトリからコードを取得します。こちらはRuby1.9系対応済みです。 gr4y / HTTP-Live-Video-Stream-Segmenter-and-Distributor

git clone https://github.com/gr4y/HTTP-Live-Video-Stream-Segmenter-and-Distributor.git

Makefileを修正します。ビルドに必要なヘッダとライブラリのパスを指定します。 HTTP-Live-Video-Stream-Segmenter-and-Distributor/Makefile


all:
    gcc -Wall -g live_segmenter.c -o live_segmenter -lavformat -lavcodec -lavutil -lbz2 -lm -lz -lfaac -lmp3lame -lx264 -lfaad -lpthread -I/opt/local/include -L/opt/local/lib

clean:
    rm -f live_segmenter

makeします。

$ make

できたファイルを適当なディレクトリにコピーします。パスが通ったディレクトリに配置すればいいと思いますが、今回はアプリの配布パッケージに含めてしまいます。


$ cp live_segmenter ~/PecaStream/Resources
$ cp http_streamer.rb ~/PecaStream/Resources
$ cp hs_config.rb ~/PecaStream/Resources
$ cp hs_encoder.rb ~/PecaStream/Resources
$ cp hs_transfer.rb ~/PecaStream/Resources
PeerCast Qt

下記サイトからバイナリをダウンロード PeerCast Qt

以上で環境構築は終了です。 次回は使い方を見ていきたいと思います。

参考リンク

Free Live Video Streaming with HTTP Live Streaming, uStream and justin.tv in a GNU Linux Environment

関連リンク

iPhoneからPeerCastの動画配信をリアルタイムに視聴する

Categories: 02.Article Tags: ,

MacでFFmpegをあんじょうビルドする(解決編)

February 22nd, 2011 No comments

概要

MacでFFmpegをmmshに対応させてビルドする方法が分かったのでメモ。 MacPortsでffmpeg-develをインストールして、オフィシャルから落とした最新パッケージをビルドすればいいだけでした

間違い。 ffmpeg-develがmmshに対応していました。 ffmpegをインストールしている場合、deactivateしてからffmpeg-develをインストールします。

sudo port deactivate ffmpeg
sudo port install ffmpeg-devel

どうもお騒がせしました

Categories: 02.Article Tags: ,

iPhoneからPeerCastの動画配信をリアルタイムに視聴する

February 22nd, 2011 No comments

概要

iPhoneからPeerCastの動画配信をリアルタイムに視聴する方法を調べたのでメモしておきます。 現時点ではまだ検証段階です。

技術要素

HTTP Live Streaming

HTTP Live Streaming はiPhoneで採用されている次世代のストリーミング技術です。動画や音声をHTTPでダウンロードしつつ同時に再生するというすご技で、ストリーミング用のプロトコルを使わずともHTTPだけで動画をストリーミング配信できます。 仕組みはとても単純です。まず、サーバに動画のプレイリストと細切れに分割された動画を用意します。 クライアントはプレイリストを読み込んでプレイリストの動画を数珠つなぎに再生していきます。 プレイリストは動画の追加が随時可能なのでリアルタイムの配信などにも対応できます。

18年越しの大改修! Snow LeopardのQuickTime X HTTP Live Streaming

FFmpeg

いわずと知れた最強の動画ソリューションです。 PeerCastのストリーミングを受信するのに使います。

HTTP-Live-Video-Stream-Segmenter

HTTP Live Streaming に対応したHTTPサーバとして動作します。 ffmpeg の受信データをパイプするだけでHTTP Live Streamingが可能です。

処理の流れ

・FFmpegでPeerCastの動画ストリームを受信 ・ストリームをiPhoneで見られる形式にエンコードしてSegmenterにパイプ ・SegmenterがHTTP Live Streamingに対応した形で動画とプレイリストを生成 ・iPhoneクライアントがプレイリストを読み込んで配信をリアルタイムに視聴

参考リンク

同様の構成でニコニコ動画非公式ビュアが実現されている。 NeetAndCat

関連リンク

iPhoneからPeerCastの動画配信をリアルタイムに視聴する(環境構築編) iPhoneからPeerCastの動画配信をリアルタイムに視聴する(使ってみようFFmpeg編) iPhoneからPeerCastの動画配信をリアルタイムに視聴する(使ってみようlive segmenter編)

Categories: 02.Article Tags: ,