Pessoal,
Estou fazendo a transmissão de um vídeo usando como red5.
Então, tenho a minha aplicação em flex rodando em um tomcat6 e uso a
aplicação oflaDemo que já vem com o Red5 conectar minha tarnsmissão.
Conectar:
private function init():void
{
if(bConectar.label == "Conectado")
{
bConectar.label = "Conectar ao servidor";
statusImage.source = "off.png";
} else {
if(nc != null)
nc = null;
nc = new NetConnection();
nc.addEventListener( NetStatusEvent.NET_STATUS,
netStatus );
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
onSecurityError);
trace("Connecting to Red5...");
nc.connect("rtmp://localhost/oflaDemo/test");
// Este aplicxativo contém os métodos chamados pelo
servidor
nc.client = this;
usuario.editable = true;
}
}
Transmitir:
private function controlador():void
{
if(controller.source == "play.png"){
controller.source = "stop.png";
nsPub = new NetStream (nc);
nsPub.addEventListener(NetStatusEvent.NET_STATUS,
netStatus);
nsPub.addEventListener(AsyncErrorEvent.ASYNC_ERROR,
onAsyncError);
var camera:Camera = Camera.getCamera();
camera.setMode(320, 240, 15, false);
camera.setQuality(0, 80);
camera.setKeyFrameInterval(15);
nsPub.attachCamera(camera);
var microphone:Microphone = Microphone.getMicrophone
();
nsPub.attachAudio(microphone);
// nome que será publicado
nsPub.publish("hostStream", "live");
} else {
controller.source = "play.png";
nsPub.close()
nsPub = null
}
}
Para fazer a gravação estou tentando fazer o que mostrar estes link:
http://sziebert.net/posts/server-side-stream-recording-with-red5/
http://sziebert.net/posts/server-side-stream-recording-updated/
Então adicionei essas classes no projeto oflaDemo:
public class ApplicationX extends ApplicationAdapter {
protected static Logger log = LoggerFactory.getLogger
(DemoService.class);
/* ----- ApplicationAdapter delegate methods ----- */
/**
* Delegate method used to accept/reject incoming connection
requests.
*
* @param conn
* @param params
* @return true/false
*/
@Override
public boolean roomConnect(IConnection conn, Object[] params) {
log.debug("New connection attempt from {}...",
conn.getRemoteAddress
());
System.out.println("New connection attempt from {}..."+
conn.getRemoteAddress());
// Insure that the listeners are properly attached.
return super.roomConnect(conn, params);
}
/**
* Delegate method which logs connection/client/user disconnections.
*
* @param conn
*/
@Override
public void roomDisconnect(IConnection conn) {
log.debug("Connection closed by {}...",
conn.getRemoteAddress());
System.out.println("Connection closed by {}..."+
conn.getRemoteAddress());
// Call the super class to insure that all listeners are
properly
dismissed.
super.roomDisconnect(conn);
}
/* ----- Application utility methods ----- */
}
public class StreamManager {
protected static Logger log = LoggerFactory.getLogger
(DemoService.class);
// Application components
private ApplicationX app;
/**
* Start recording the publishing stream for the specified
* <code>IConnection</code>.
*
* @param conn
*/
public void recordShow(IConnection conn) {
log.debug("Recording show for: {}",
conn.getScope().getContextPath
());
System.out.println("Recording show for: {}"+ conn.getScope
().getContextPath());
String streamName = String.valueOf(System.currentTimeMillis());
// Get a reference to the current broadcast stream.
ClientBroadcastStream stream = (ClientBroadcastStream)
app.getBroadcastStream(conn.getScope(), "hostStream");
try {
// Save the stream to disk.
stream.saveAs(streamName, false);
} catch (Exception e) {
//logger.error("Error while saving stream: {}",
streamName);
System.out.println("Error while saving stream: {}"+
streamName);
}
}
/**
* Stops recording the publishing stream for the specified
* <code>IConnection</code>.
*
* @param conn
*/
public void stopRecordingShow(IConnection conn) {
log.debug("Recording show for: {}",
conn.getScope().getContextPath
());
System.out.println("Stop recording show for: {}"+ conn.getScope
().getContextPath());
// Get a reference to the current broadcast stream.
ClientBroadcastStream stream = (ClientBroadcastStream)
app.getBroadcastStream(conn.getScope(), "hostStream");
// Stop recording.
stream.stopRecording();
}
/* ----- Spring injected dependencies ----- */
public void setApplication(ApplicationX app) {
this.app = app;
}
}
E editei o arquivo red5-web.xml adicionando:
<bean id="streamManager.service"
class="org.red5.server.webapp.oflaDemo.StreamManager">
<property name="applicationX" ref="web.handlerX"/>
</bean>
<bean id="web.handlerX"
class="org.red5.server.webapp.oflaDemo.ApplicationX"/>
Agora no Flex criei uma função para tentar gravar:
private function onClick():void {
// Record the stream by triggering a server event.
if (record.label == "Record") {
// Tell the remote server to start
recording.
nc.call("streamManager.recordShow",
null);
// Re-label the button.
record.label = "Stop";
// Stop recording the stream.
} else if (record.label == "Stop") {
// Tell the remote server to stop
recording.
nc.call("streamManager.stopRecordingShow", null);
// Re-label the button.
record.label = "Record";
}
}
Mas nada acontece, gostaria de saber se alguém pode me ajudar. O Erko
me ajudou a entender algumas coisas, mas ainda não consegui fazer isso
funcionar.
Aguardo a ajuda de vocês.
Obrigado,
Vinicius.
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---