0
我嘗試通過RTP將H264傳輸到VLC,而不使用RTSP,即從IP攝像頭接收H.264數據流,並將其發送到另一臺主機上的VLC。 VLC打開URL「rtp:// @:12345」。 注意openRTSP使用H264VideoFileSink類做同樣的事情,但數據輸出到文件中,我替換的代碼部分:使用live555將H264傳輸到VLC
if (strcmp(subsession->mediumName(), "video") == 0) {
if (strcmp(subsession->codecName(), "H264") == 0) {
// For H.264 video stream, we use a special sink that adds 'start codes',
// and (at the start) the SPS and PPS NAL units:
//fileSink = H264VideoFileSink::createNew(*env, outFileName,
// subsession->fmtp_spropparametersets(),
// fileSinkBufferSize, oneFilePerFrame);
char const* outputAddressStr = "192.168.1.123"; // this could also be unicast
struct in_addr outputAddress;
outputAddress.s_addr = our_inet_addr(outputAddressStr);
const Port outputPort(12345);
unsigned char const outputTTL = 255;
Groupsock outputGroupsock(*env, outputAddress, outputPort, outputTTL);
rtpSink = H264VideoRTPSink::createNew(*env, &outputGroupsock, 96);
}
…
然後,
subsession->sink = rtpSink;
subsession->sink->startPlaying(*(subsession->readSource()),
subsessionAfterPlaying,
subsession);
結果是openRTSP正在運行,但VLC收到沒有。我使用Wireshark來檢查,沒有數據包發送到目標IP和端口。
我也嘗試testMP3Streamer,用上面的單播地址替換多播地址。 VLC可以播放它。 有人能給我一些建議嗎?
它的工作!VLC說:「SDP格式描述是需要接收RTP流。請注意,rtp:// URI不能與動態RTP有效載荷格式(96)一起使用。「這意味着VLC實際上接收到RTP數據包。謝謝。 – myggao