最后,我创建了一个流视频录像机 Flash 应用程序及其简单的 Red5 后端,但当然 Red5 又跟我开玩笑了。大多数时候,录制的视频都已损坏,如果不随机停止-恢复就无法播放它们,挂出播放器......还有我。为什么要这样做?
我在网上查了一下,发现了这个问题,但没有解决!我尝试不录制视频,而是将其切换为实时视频并附加 ffmpeg 来完成肮脏的工作,但 ffmpeg 自然无法连接到 red5 输出上的以下错误消息:
Error executing call: Service: null Method: play Num Params: 1 0: my_little_stream ... blabla bla
在我尝试集成 Xuggler 之前我真正不想做的事情我问你,该怎么办,我可以以某种方式附加 ffmpeg 或者 red5 服务器中是否有我应该更改的配置..或任何东西!谢谢!
编辑:我使用的是 Red5 1.0 RC2
Edit#2:我使用 red5 1.0.0rc2 服务器文件从主干源编译了 oflaDemo 应用程序,然后使用一个简单的 Flex 应用程序创建了一个实时流,只是为了尝试 ffmpeg 录音机是否工作。现在它可以连接到red5,但结果是一样的!视频似乎已损坏...
最佳答案
*但是我应该在 packetReceived() 函数中放入什么? *
我将其添加到单独的答案中以正确突出显示:
要将数据包写入磁盘,您需要: 1)数据包, 2)将数据包转换为ITag 3)获取ITagWriter的实例
public void packetReceived(IBroadcastStream broadcastStream,
IStreamPacket streampacket) {
}
streampacket => 要写入磁盘的数据包。
2) 通过将数据包转换为 Itag 来写入数据包
IoBuffer data = streampacket.getData().asReadOnlyBuffer();
if (data.limit() == 0) {
return;
}
if (startTimeStamp == -1) {
// That will be not bigger then long value
startTimeStamp = streampacket.getTimestamp();
}
timeStamp -= startTimeStamp;
ITag tag = new Tag();
tag.setDataType(streampacket.getDataType());
// log.debug("data.limit() :: "+data.limit());
tag.setBodySize(data.limit());
tag.setTimestamp(timeStamp);
tag.setBody(data);
writer.writeTag(tag);
3)获取Writer的实例
protected ITagWriter writer = null;
private void init() throws IOException {
file = new File(OmFileHelper.getStreamsSubDir(this.scope.getName()), this.streamName + ".flv");
IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
.getScopeService(this.scope, IStreamableFileFactory.class,
StreamableFileFactory.class);
if (!this.file.isFile()) {
// Maybe the (previously existing) file has been deleted
this.file.createNewFile();
} else if (!file.canWrite()) {
throw new IOException("The file is read-only");
}
IStreamableFileService service = factory.getService(this.file);
IStreamableFile flv = service.getStreamableFile(this.file);
this.writer = flv.getWriter();
}
所以这是一个粗略的演练。从这个意义上说,您可以继续。
类还包含一个队列来收集数据包。
IStreamPacket.getType == 9 是视频,我认为 8 是音频(但您需要验证这一点)。
塞巴斯蒂安
关于java - Red5视频流录制中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845920/