我一直在寻找一个简单(或者可能不那么简单)的解决方法,以解决我在设置一个简单测试用例时遇到的问题:red5 媒体服务器上的视频流。
我已经构建了一个从 YouTube 上抓取的小型 FLV 文件库,并设法使用以下 perl 脚本连续播放它们:
use Cwd;
use strict;
use warnings;
use DBI;
use DBD::mysql;
our $db = DBI->connect();
my $dst = "/home/seb/youtube/";
sub streamFile {
my $r = $db->prepare("SELECT name FROM music_flvs ORDER BY RAND() LIMIT 1");
$r->execute();
my @data = $r->fetchrow_array();
my $filename = $data[0]
my $t = `ffmpeg -re -i '${dst}${filename}' -ab 48k -ac 1 -vcodec libx264 -crf 30 -s "640x480" -acodec libfaac -ar 44100 -threads 4 -f flv 'rtmp://server/oflaDemo/music'`;
return 1;
}
while (&streamFile()) {
}
这个脚本非常好地完成了它的任务:它通过ffmpeg
. 但是,这样做有一个关键问题:每次交换歌曲时都会引发Unpublish事件,从而导致所有客户端断开连接。我想防止这种情况。该事件在 ActionScript 中表现为:
16:33:54:209 - Playback - NetStream.Play.UnpublishNotify
16:33:54:209 - Playback - NetStream.Play.PublishNotify
我已经看过解concat
复用器,并相信它可能会对我有所帮助。问题很简单:让 ffmpeg 将播放列表流式传输到 RTMP 服务器而不引起 Unpublish 事件的最佳方法是什么?