2013-04-30 3 views
2

Я искал простой (или, возможно, не так-простой) ход для проблемы, которую я имею в своей настройке для простого тестового примера: потоковая передача видео через red5 media сервер.ffmpeg - непрерывная потоковая передача файлов по RTMP

Я построил небольшой иш библиотека FLV файлов соскабливают с YouTube и сумел воспроизвести их последовательно со следующим 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?

ответ

1

Я не думаю, что есть простой способ FFMPEG, чтобы предотвратить отправку этих событий.

Когда вы говорите клиентам, вы действительно имеете в виду клиентов Flash, которые играют в поток прямо?

Хорошо, что вы могли бы сделать, это сохранить эти видео на red5 и настроить плейлист в Red5 вместо потоковой передачи из FFMPEG в Red5. Red5 имеет так называемую функцию Playlist, которая может воспроизводить видео в строке.

Если ваши клиенты выполнены на заказ, вы можете просто изменить клиентов, чтобы пропустить это. Я думаю, что самый распространенный способ, которым люди используют бесконечный плейлист, - иметь простой код на стороне клиента ActionScript, который автоматически пропускает разные видео. Это проще, чем любое решение на стороне сервера.

+0

Это то, что я думал. Тем не менее, я хотел бы, чтобы кто-то мог «переопределить» поток как таковой - если необходимо, перейдите по произвольному плейлисту. Кстати, я пришел из Shoutcast на этом, у которого есть эти функции. Идея клиента хорошая, и я, скорее всего, поеду с этим. –

+0

Построение пользовательского флеш-клиента решает проблему. Ответ принят, большое спасибо за совет :-) –

Смежные вопросы