Erko,
Estou utilizando o projeto oflaDemo agora e alterei o meu onClick e agora
está dessa forma:
private function onClick():void {
// Record the stream by triggering a server event.
if (record.label == "Record") {
Alert.show("Application.appConnect");
// Tell the remote server to start recording.
nc.call("Application.appConnect", 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("Application.appDisconnect", null);
// Re-label the button.
record.label = "Record";
}
O oflaDemo contém essas classes:
Application:
package org.red5.server.webapp.oflaDemo;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IBandwidthConfigure;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.red5.server.api.stream.IServerStream;
import org.red5.server.api.stream.IStreamCapableConnection;
import org.red5.server.api.stream.support.SimpleConnectionBWConfig;
public class Application extends ApplicationAdapter {
private IScope appScope;
private IServerStream serverStream;
/** {...@inheritdoc} */
@Override
public boolean appStart(IScope app) {
appScope = app;
return true;
}
/** {...@inheritdoc} */
@Override
public boolean appConnect(IConnection conn, Object[] params) {
// Trigger calling of "onBWDone", required for some FLV players
measureBandwidth(conn);
if (conn instanceof IStreamCapableConnection) {
IStreamCapableConnection streamConn = (IStreamCapableConnection)
conn;
SimpleConnectionBWConfig bwConfig = new
SimpleConnectionBWConfig();
bwConfig.getChannelBandwidth()[IBandwidthConfigure.OVERALL_CHANNEL] =
1024 * 1024;
bwConfig.getChannelInitialBurst()[IBandwidthConfigure.OVERALL_CHANNEL] =
128 * 1024;
streamConn.setBandwidthConfigure(bwConfig);
}
// if (appScope == conn.getScope()) {
// serverStream = StreamUtils.createServerStream(appScope,
"live0");
// SimplePlayItem item = new SimplePlayItem();
// item.setStart(0);
// item.setLength(10000);
// item.setName("on2_flash8_w_audio");
// serverStream.addItem(item);
// item = new SimplePlayItem();
// item.setStart(20000);
// item.setLength(10000);
// item.setName("on2_flash8_w_audio");
// serverStream.addItem(item);
// serverStream.start();
// try {
// serverStream.saveAs("aaa", false);
// serverStream.saveAs("bbb", false);
// } catch (Exception e) {}
// }
return super.appConnect(conn, params);
}
/** {...@inheritdoc} */
@Override
public void appDisconnect(IConnection conn) {
if (appScope == conn.getScope() && serverStream != null) {
serverStream.close();
}
super.appDisconnect(conn);
}
}
DemoService:
package org.red5.server.webapp.oflaDemo;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.red5.server.api.IScope;
import org.red5.server.api.Red5;
import org.springframework.core.io.Resource;
public class DemoService {
protected static Logger log =
LoggerFactory.getLogger(DemoService.class);
private String formatDate(Date date) {
SimpleDateFormat formatter;
String pattern = "dd/MM/yy H:mm:ss";
Locale locale = new Locale("en", "US");
formatter = new SimpleDateFormat(pattern, locale);
return formatter.format(date);
}
/**
* Getter for property 'listOfAvailableFLVs'.
*
* @return Value for property 'listOfAvailableFLVs'.
*/
public Map getListOfAvailableFLVs() {
IScope scope = Red5.getConnectionLocal().getScope();
Map<String, Map> filesMap = new HashMap<String, Map>();
try {
log.debug("getting the FLV files");
Resource[] flvs = scope.getResources("streams/*.flv");
addToMap(filesMap, flvs);
Resource[] mp3s = scope.getResources("streams/*.mp3");
addToMap(filesMap, mp3s);
} catch (IOException e) {
log.error("{}", e);
}
return filesMap;
}
private void addToMap(Map<String, Map> filesMap, Resource[] files)
throws IOException {
if (files != null) {
for (Resource flv : files) {
File file = flv.getFile();
Date lastModifiedDate = new Date(file.lastModified());
String lastModified = formatDate(lastModifiedDate);
String flvName = flv.getFile().getName();
String flvBytes = Long.toString(file.length());
if (log.isDebugEnabled()) {
log.debug("flvName: {}", flvName);
log.debug("lastModified date: {}", lastModified);
log.debug("flvBytes: {}", flvBytes);
log.debug("-------");
}
Map<String, Object> fileInfo = new HashMap<String,
Object>();
fileInfo.put("name", flvName);
fileInfo.put("lastModified", lastModified);
fileInfo.put("size", flvBytes);
filesMap.put(flvName, fileInfo);
}
}
}
}
DemoServiceImpl:
package org.red5.server.webapp.oflaDemo;
import java.util.HashMap;
import java.util.Map;
public class DemoServiceImpl implements IDemoService {
/**
* Getter for property 'listOfAvailableFLVs'.
*
* @return Value for property 'listOfAvailableFLVs'.
*/
public Map getListOfAvailableFLVs() {
System.out.println("getListOfAvailableFLVs empty");
return new HashMap(1);
}
public Map getListOfAvailableFLVs(String string) {
System.out.println("getListOfAvailableFLVs, Got a string: " +
string);
return getListOfAvailableFLVs();
}
}
IDemoService:
package org.red5.server.webapp.oflaDemo;
import java.util.Map;
public interface IDemoService {
/**
* Getter for property 'listOfAvailableFLVs'.
*
* @return Value for property 'listOfAvailableFLVs'.
*/
public Map getListOfAvailableFLVs();
public Map getListOfAvailableFLVs(String string);
}
Estou conseguiu transmitir e assistir, mas não grava. Usando o exemplo do
Red5 que usa também o oflaDemo grava direitinho. Queria dar uma olhada no
fonte, ma sé um swf.
Obrigado,
Vinicius.
2009/7/8 Erko Bridee de Almeida Cabrera <[email protected]>
> Vinicius,
>
> - então aonde você vai mudar não é no Flex...
>
> - você tem que implementar o suporte no lado do Red5, código java lá
>
> ----
>
> observe os arquivos em anexo:
>
> 1 - red5-web.xml
> você vai precisar fazer essa configuração
>
> 2 - vai precisar implementar classes de suporte para gerenciar o stream e
> efetuar a gravação
> essas classes estão mapeadas no XML, veja a classe StreamManager.java é
> nela que é
> feito a gravação para arquivo do Stream, observe a linha 29, veja que está
> monitorando *hostStream*
>
> 3 - observe a classe ActionScript
> métodos:
> - initConnection() > linha 71
> ali é feito a conexão do Flex/Flash com o Red5
>
> - publish() > linha 80
> observe o código do método, e importate observe a linha: 86
>
> ali você define a parte fundamental, lembre que lá na codificação de
> suporte java no Red5, você está monitorando
> a publicação com nome *hostStream* ali é onde você define no Flex/Flash
> para publicar com esse nome, com isso
> vai ser captado pela funcionalidade que irá gravar o vídeo no Red5
>
> ---
>
> será que ajudou em algo ? =D
>
> qq coisa diga ae o/
>
>
> --
> Att,
> Erko Bridee de Almeida Cabrera
> http://erkobridee.com/
> http://gospel.erkobridee.com/
> http://www.cwbfx.com/
> http://www.portaljava.com/
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito no Grupo "flexdev" nos Grupos
do Google.
Para postar neste grupo, envie um e-mail para [email protected]
Para cancelar a sua inscrição neste grupo, envie um e-mail para
[email protected]
Para ver mais opções, visite este grupo em
http://groups.google.com/group/flexdev?hl=pt-BR
-~----------~----~----~----~------~----~------~--~---