2016-05-31 44 views
0

H264をRTSPなしでRTP経由でVLCにストリーミングしようとすると、IPカメラからH.26​​4ストリームを受信し、別のホストのVLCに送信します。 VLCはURL「rtp:// @:12345」を開いた。 、私は、コードの一部を置き換えるopenRTSPがH264VideoFileSinkクラスを使用してファイルに同じことが、出力データをやっていること お知らせ:H264をVLCにストリームするにはlive555を使用

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を試してみてください。マルチキャストアドレスをunavastアドレスabovedに置き換えてください。 VLCはそれを再生することができます。誰も私にいくつかの提案を教えてもらえますか?

答えて

0

ありseveralsエラーは、あなたのコードであるH264フレーマは、あなたがH264VideoRTPSink.cppで見ることができるよう、H264VideoRTPSinkを養うために必要とされている隣の最初のGroupsockスコープが、狭すぎる:

Boolean H264VideoRTPSink::sourceIsCompatibleWithUs(MediaSource& source) { 
    // Our source must be an appropriate framer: 
    return source.isH264VideoStreamFramer(); 
} 

その後、すべて置きます一緒に次のようなものが得られます:

char const* outputAddressStr = "192.168.1.123"; 
struct in_addr outputAddress; 
outputAddress.s_addr = our_inet_addr(outputAddressStr); 

const Port outputPort(12345); 
unsigned char const outputTTL = 255; 

Groupsock* outputGroupsock = new Groupsock(*env, outputAddress, outputPort, outputTTL); 
rtpSink = H264VideoRTPSink::createNew(*env, outputGroupsock, 96); 

subsession->addFilter(H264VideoStreamDiscreteFramer::createNew(*env, subsession->readSource()));    
+0

VLCは、「SDP形式の記述はRTPストリームを受け取る必要があります。 rtp:// URIsは動的RTPペイロードフォーマット(96)で動作できないことに注意してください。 "これは、VLCが実際にRTPパケットを受信したことを意味します。ありがとうございました。 – myggao

関連する問題