簡體   English   中英

ffmpeg RTSP over TCP,RTP 時間戳始終為零

[英]ffmpeg RTSP over TCP, RTP timestamps are always zero

我正在嘗試從 RTP 數據包中獲取時間戳。 當我使用 Wireshark 掃描數據包時,我得到以下輸出: rtp_packet我看到時間戳在幾個數據包之后增加了。 我遇到的問題如下:當我從 C 中的 RTPDemuxContext->timestamp (rtp_demux_context->timestamp) 讀取時間戳值時,對於多個攝像機,該值始終為零,但對於大多數攝像機,代碼運行良好。 您能幫助找出相機中的錯誤或 ffmpeg 中的錯誤嗎?

有我的代碼:

double ntp_timestamp(AVFormatContext* pFormatCtx, uint32_t* last_rtcp_ts, double* base_time) {
RTSPState* rtsp_state = (RTSPState*) pFormatCtx->priv_data;
RTSPStream* rtsp_stream = rtsp_state->rtsp_streams[0];
RTPDemuxContext* rtp_demux_context = (RTPDemuxContext*) rtsp_stream->transport_priv;

uint32_t new_rtcp_ts = rtp_demux_context->last_rtcp_timestamp;

uint64_t last_ntp_time = 0;

if (new_rtcp_ts != *last_rtcp_ts) {
    *last_rtcp_ts = new_rtcp_ts;
    last_ntp_time = rtp_demux_context->last_rtcp_ntp_time;
    uint32_t seconds = ((last_ntp_time >> 32) & 0xffffffff) - 2208988800;
    uint32_t fraction  = (last_ntp_time & 0xffffffff);
    double useconds = ((double) fraction / 0xffffffff);
    *base_time = seconds + useconds;
}
uint32_t d_ts = rtp_demux_context->timestamp - *last_rtcp_ts;
return *base_time + d_ts / 90000.0;

}

可能是因為您從RTP時間戳seconds減去了2208988800嗎? 我懷疑這可能是原因。 我處於類似情況,但發現打開相機電源后時間戳開始增加。

可能是 rtsp 服務器不發送任何 rtcp 發件人報告。 您可以通過wireshake檢查服務器是否發送rtcp發件人報告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM