循环播放MP4视频

时间:2015-04-07 21:01:26

标签: video mp4 vlc rtp libvlc

我需要与一台预期来自摄像机的MPEG-4 RTP流的硬件接口(实际上是来自多个不同摄像机的多个流)。我们要做的是从一组小的.mp4文件提供该视频,无休止地循环。 1

我现在正在尝试的是在服务器模式下使用libVLC,使用" - 循环"论点。此代码如下所示:

    libvlc_vlm_add_broadcast(vlc, "test", ("file:///" + video).c_str(),
                            "#rtp{dst=localhost,port=1234,sdp=rtsp://localhost:8080/test.sdp}",
                            1, broadcast_options, true, true);
    const auto play_result = libvlc_vlm_play_media(vlc, "test");

这似乎在我的桌面上工作,有一个问题:我也必须把玩家放在循环上。如果我只是要求播放器播放一次流,它会在达到服务器文件末尾时停止。

有没有办法让它像一个连续的(永无止境的)流一样看待客户端? VLC不是必需的,但是RTP MP4流是。

1 - 不,我不想抢劫博物馆。这是一个模拟器。

1 个答案:

答案 0 :(得分:1)

cvlc(CLI VLC)中运行相当于您的代码会导致"死输入",可能是由于不连续(说没有ES可以播放......)。 / p>

有一种方法可以使用FFmpeg来完成,但它并不是非常简单。如果有更简单的方式我也想知道。

1。创建要播放的文件的播放列表(例如playlist.txt)。没有播放列表循环选项,因此您需要根据需要多次重复播放列表中的文件。使用格式:

file '/path/to/file/1.mp4'    
file '/path/to/file/2.mp4'    
file '/path/to/file/3.mp4'    
[... repeat ...]    
file '/path/to/file/1.mp4'    
file '/path/to/file/2.mp4'    
file '/path/to/file/3.mp4'

从这里开始,您将使用concat demuxer创建无缝流。您有两种选择:

2-A。使用RTP并手动提供SDP文件。每个端口只能使用一个流,因此如果需要音频,则需要将其映射到第二个输出。

ffmpeg -re -f concat -i playlist.txt -an -vcodec mpeg4 -f rtp rtp://127.0.0.1:1234

SDP显示在控制台输出中:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 56.26.101
m=video 1234 RTP/AVP 96
b=AS:200
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96 profile-level-id=1

2-B。使用RTSP将流发送到支持它的服务器(文档指定Darwin Streaming Server和Mischa Spiegelmock的RTSP服务器)。您需要在执行以下操作之前安装和配置服务器:

ffmpeg -re -f concat -i playlist.txt -an -vcodec mpeg4 -f rtsp rtsp://server:port/stream_name.sdp

然后在客户端上使用rtsp://server/stream_name.sdp

*应使用自动化机器人垃圾桶进行博物馆盗窃。