2013-04-30 2 views
2

간단한 테스트 케이스를 위해 설정 한 문제에 대한 간단한 (또는 간단하지는 않은) 둘러보기를 둘러 보았습니다. red5 미디어를 통한 비디오 스트리밍 섬기는 사람.ffmpeg - RTMP를 통한 연속 파일 스트리밍

는 내가 FLV 파일의 작은 틱 라이브러리가 YouTube에서 긁어 다음과 같은 펄 스크립트를 연속적으로 재생할 관리 구축

:

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()) { 
} 

이 스크립트는 매우 잘 그것의 목적을 수행합니다 그것은 파일을 재생 1에서 ffmpeg까지 그러나 중요한 문제가 있습니다 : 노래를 바꿀 때마다 게시 취소 이벤트가 발생하여 모든 클라이언트 연결이 끊어집니다. 나는 이것을 방지하고 싶다. 이 이벤트는이 같은 ActionScript에서 자체 명단 : 나는 concat 디멀티플렉서 본과 다소 나에게 도움이 될 수 있다고 생각했다

16:33:54:209 - Playback - NetStream.Play.UnpublishNotify 
16:33:54:209 - Playback - NetStream.Play.PublishNotify 

. 질문은 매우 간단합니다 : ffmpeg를 재생 목록을 RTMP 서버에 게시하지 않고 언 퍼블리시 이벤트를 발생시키지 않는 가장 좋은 방법은 무엇입니까?

답변

1

나는 그 이벤트를 보내는 것을 막기위한 간단한 FFMPEG 방법이 없다고 생각합니다.

클라이언트를 말하면 실제로 스트림을 재생하는 Flash 클라이언트를 의미합니까?

당신이 할 수있는 일은 red5에 해당 비디오를 저장하고 FF5에서 Red5로 스트리밍하는 대신 Red5에서 재생 목록을 구성하는 것입니다. Red5는 동영상을 연속 재생할 수있는 재생 목록 기능을 제공합니다.

고객이 맞춤식으로 제작 한 경우이 문제를 건너 뛰도록 클라이언트를 수정할 수도 있습니다. 사람들이 무한 재생 목록을 구현하는 가장 일반적인 방법은 다른 동영상을 자동으로 건너 뛸 수있는 간단한 ActionScript 클라이언트 측 코드를 갖는 것입니다. 그것은 모든 종류의 서버 측 솔루션보다 쉽습니다.

+0

이것은 내가 생각한 것입니다. 그러나 누군가가 필요에 따라 임의의 재생 목록을 통해 스트림을 "대체"할 수있게하고 싶습니다. 나는이 특징에 관한 Shoutcast에서 오는 중입니다. 고객의 아이디어는 좋은 생각이고, 나는 그걸로 갈 것 같습니다. –

+0

맞춤형 플래시 클라이언트를 구축하면 문제가 해결됩니다. 답변을 수락, 대단히 조언을 주셔서 감사합니다 :-) –

관련 문제