/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under GNU LESSER GENERAL PUBLIC LICENSE Version 3.
*/
package com.ttProject.flazr.test.publish;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.flazr.rtmp.RtmpMessage;
import com.flazr.rtmp.RtmpWriter;
import com.ttProject.container.flv.AggregateTag;
import com.ttProject.container.flv.FlvTag;
import com.ttProject.flazr.unit.MessageManager;
/**
* データをダウンロードするところ
* @author taktod
*/
public class ReceiveWriter implements RtmpWriter {
/** ロガー */
@SuppressWarnings("unused")
private Logger logger = LoggerFactory.getLogger(ReceiveWriter.class);
private MessageManager messageManager = new MessageManager();
// rtmp配信側のプログラム
private SendReader sendReader = new SendReader("rtmp://localhost:1935/live");
@Override
public void close() {
// おわった場合の処理
}
/**
*
*/
public void publishStart() {
try {
sendReader.open();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**
*
*/
public void publishStop() {
}
/**
*
*/
public void playStart() {
}
// messageをpublishしなおした場合は、rtmpサーバーから送られてくるデータのtimestampが0からにならないっぽいので、調整が必要。
// どうやら続きになるらしい。
@Override
public void write(RtmpMessage message) {
// rtmpサーバーからメッセージをうけとった場合の処理
try {
FlvTag tag = messageManager.getTag(message);
// このtagを別のサーバーにまわしたい。
// publish中でない状態でデータをうけとったら、publishのプロセス準備が必要。
// publish中にデータをうけとったら、相手サーバーに送ればOK
if(tag instanceof AggregateTag) {
AggregateTag aTag = (AggregateTag) tag;
for(FlvTag flvTag : aTag.getList()) {
sendReader.send(flvTag); // flvTagを渡しておく。
}
}
else {
sendReader.send(tag); // flvTagを渡しておく。
}
}
catch(Exception e) {
e.printStackTrace();
System.exit(0); // とりあえずDLに例外が発生したら、処理を中断しておく。
}
}
}