最终,我创建了一个流式录像机Flash应用程序及其简单的Red5后端,但是Red5当然再次使我开玩笑。在大多数情况下,录制的视频已损坏,无法在不随机停止-
继续播放的情况下播放它们,也不会和播放器和我一起玩。为什么这样做呢?
我研究了互联网,发现了这个问题,但没有解决方案!我尝试不录制视频,而是将其切换为直播并附加ffmpeg来完成肮脏的工作,但ffmpeg自然无法在red5的输出上显示以下错误消息:
执行调用时出错:服务:null方法:播放数字参数:1 0:my_little_stream … blabla bla
在我尝试整合Xuggler的东西之前,我真正不想让我问你,该怎么做,我可以以某种方式附加ffmpeg还是在red5服务器中配置我应该更改..或其他任何东西!谢谢!
编辑 :我正在使用Red5 1.0 RC2
编辑#2 :我使用Red5
1.0.0rc2服务器文件从中继源编译了oflaDemo应用程序,然后使用简单的flex应用程序创建了实时流,只是为了尝试ffmpeg记录器是否工作。现在它可以连接到red5,但结果是一样的!这些视频似乎已损坏…
但是我应该在packetReceived()函数中添加什么?
我将其添加到单独的答案中以正确突出显示:
要将数据包写入磁盘,您需要:1)数据包,2)将数据包转换为ITag 3)获取ITagWriter的实例
1)数据包数据
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/StreamVideoListener.java?view=markup
50行
public void packetReceived(IBroadcastStream broadcastStream,
IStreamPacket streampacket) {
}
streampacket =>您要写入磁盘的数据包。
2)通过将数据包转换为ITag来写入数据包
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java?view=markup
90ff Line附近
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的实例
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?view=markup
90ff Line附近
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();
}
因此,这是一个艰难的过程。从这个意义上讲,您可以继续进行。
该
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?view=markup
类还包含一个队列来收集数据包。
IStreamPacket.getType == 9是视频,我认为8是音频(但您需要验证)。
塞巴斯蒂安
我正在使用AVPlayer播放HLS流。当用户按下录制按钮时,我还需要录制这些流。我使用的方法是分别录制音频和视频,然后在最后合并这些文件以制作最终视频。远程mp4文件是成功的。 但是现在对于HLS(.m3u8)文件,我可以使用AVAssetWriter录制视频,但音频录制有问题。 我正在使用MTAudioProccessingTap处理原始音频数据并将其写入文件。我遵循了这篇文章。我能够录制远程
我们有一台摄像机,记录高FPS率-163的视频。 谢谢!
问题内容: 我正在尝试建立一个程序来录制一部分互联网音频流,并将其保存到文件(最好是mp3或wav)。我到处都看过,找不到任何合适的方法来做到这一点。我找到了两个似乎可以工作的不同库(NativeBass和Xuggle),但我都不支持64位Windows。 有谁知道使用Java保存一部分互联网音频流的任何简单方法?(如果重要,则为“音频/ mpeg”流)。 编辑:好的,我发现了一种可行的方法。但是
我使用jitsi为我们的需求之一。我已经按照快速安装步骤配置和安装jitsi。我也在使用https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe来创建空间以及一些配置更改。 我们的一个要求是单独录制参与者的视频。基本上保存了每个参与者的视频流。据我所知,Jibri记录了整个会议,但我们需要单独的与会者视频流。有一个图书馆,现在
我将在android上播放Vimeo在线流媒体的视频。为此,我现在正在使用VideoView。现在,我想控制视频播放速度控制功能,如:0.5x、1x、1,5x、2x和视频缓存支持。Android VideoView是否可以实现这两个功能,或者我是否可以使用第三个播放器?帮助
我正在尝试用HLS格式录制rtsp流。我需要同时录制音频和视频。使用下面的命令,可以录制一些流的视频和音频,比如来自Internet rtsp://wowzaec2demo.streamlock.net/vod/mp4:bigbuckbunny_115k.mov的测试rtsp流。至于我的IP相机,它不工作,意味着视频被录制,但没有音频输出文件。 这是我的IP相机的命令行输出,同时开始录制上面的命令