国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

音視頻學習(二十)——rtsp收流(udp方式)

這篇具有很好參考價值的文章主要介紹了音視頻學習(二十)——rtsp收流(udp方式)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

本文主要介紹通過udp方式實現(xiàn)rtsp拉流。

流程圖

音視頻學習(二十)——rtsp收流(udp方式),音視頻學習,音視頻,學習,udp,c++

流程說明:

  • 相較于tcp方式“信令+數(shù)據(jù)”復用同一連接拉流,udp方式拉流“信令+數(shù)據(jù)”采用不同的連接,信令傳輸采用tcp,流數(shù)據(jù)傳輸采用udp;
  • 客戶端向服務端(設備等)發(fā)起tcp請求,用于后續(xù)信令交互;
  • tcp連接成功后,開始rtsp信令交互(describe、setup、play等),rtsp鏈路需要?;睿?/li>
  • 客戶端選擇兩個未用的端口創(chuàng)建udp鏈路,一個用于rtp數(shù)據(jù)傳輸,一個用于rtcp數(shù)據(jù)傳輸;
  • 連接成功后,服務端(設備等)發(fā)送數(shù)據(jù)至客戶端;
  • 客戶端對數(shù)據(jù)解復用、解碼、播放;

設計

  1. 客戶端向服務端(設備等)發(fā)起tcp請求:創(chuàng)建socket、connect、設置recv超時時間
m_tcpClient = std::make_shared<ZDTcpClient>(nullptr, this);
if (!m_tcpClient.get()
    || 0 != m_tcpClient->TcpCreate()
    || 0 != m_tcpClient->TcpConnect(ip.c_str(), port)
    || 0 != m_tcpClient->TcpSetNoBlock(true)
    || 0 != m_tcpClient->TcpRecvTimeout(10))
    break;
  1. tcp連接成功后,創(chuàng)建rtsp客戶端,開始rtsp信令交互
// 參數(shù)1(RTSP_TRANSPORT_RTP_UDP)指明使用udp方式收流
m_command = std::make_shared<CRtspCommand>(RTSP_TRANSPORT_RTP_UDP, m_tcpClient, m_func, m_user);
if (!m_command.get())
    break;

// 創(chuàng)建rtsp client
if (!m_command->CreateRtspClient(m_rtspUrl, username, userpasswd))
    break;

// 發(fā)送describe信令
int ret = m_command->SendDescribe();
if (0 != ret)
    break;
  1. 創(chuàng)建udp鏈路
int CRtspCmd::HandleRtpPort(int media, const char* source, unsigned short rtp[2], char* ip, int len)
{
	int ret = -1;
	switch (m_transport)
	{
	case RTSP_TRANSPORT_RTP_UDP:
		ret = sockpair_create("0.0.0.0", m_rtp[media], m_port[media]);
		if (0 != ret)
		{
			return -1;
		}

		rtp[0] = m_port[media][0];
		rtp[1] = m_port[media][1];
		break;
	default:
		assert(0);
		return -1;
	}

	return m_transport;
}
  1. 啟動udp收流
int CRtspUdpData::Start(int count, socket_t rtp[2], const char* peer, int peerport[2], int payload, const char* encoding)
{
    // 創(chuàng)建解復用器
	const struct rtp_profile_t* profile = rtp_profile_find(payload);
	m_demuxer = rtp_demuxer_create(100, profile ? profile->frequency : 90000, payload, encoding, RtpPacketCB, this);
	if (!m_demuxer)
		return -1;

	if (0 != CreatePacker_(payload, encoding))
	{
		rtp_demuxer_destroy(&m_demuxer);
		return -1;
	}

	m_encoding = encoding;
	m_payload = payload;
	m_socket[0] = rtp[0];
	m_socket[1] = rtp[1];
    
    // 啟動數(shù)據(jù)接收線程
	m_thread = std::thread(UdpDataThread, this);
	return 0;
}
  1. 讀rtp和rtcp數(shù)據(jù)
// 讀rtp數(shù)據(jù)
int CRtspUdpData::RtpRead_(socket_t s)
{
	if (!m_demuxer)
		return -1;

	struct sockaddr_storage ss;
	socklen_t len = sizeof(ss);
	int dataLen = recvfrom(s, m_rtpBuffer, sizeof(m_rtpBuffer), 0, (struct sockaddr*)&ss, &len);
	if (dataLen < 12)
	{
		return -1;
	}

    // 視頻數(shù)據(jù)解復用
	return rtp_demuxer_input(m_demuxer, m_rtpBuffer, dataLen);
}

// 讀rtcp數(shù)據(jù)
int CRtspUdpData::RtcpRead_(socket_t s)
{
	if (!m_demuxer)
		return -1;

	struct sockaddr_storage ss;
	socklen_t len = sizeof(ss);
	int dataLen = recvfrom(s, m_rtcpBuffer, sizeof(m_rtcpBuffer), 0, (struct sockaddr*)&ss, &len);
	if (dataLen < 12)
	{
		return -1;
	}

	return rtp_demuxer_input(m_demuxer, m_rtcpBuffer, dataLen);
}

效果

音視頻學習(二十)——rtsp收流(udp方式),音視頻學習,音視頻,學習,udp,c++文章來源地址http://www.zghlxwxcb.cn/news/detail-759723.html

到了這里,關于音視頻學習(二十)——rtsp收流(udp方式)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【音視頻開發(fā)】:RTSP服務器協(xié)議內容

    【音視頻開發(fā)】:RTSP服務器協(xié)議內容

    RTSP是一個 實時傳輸流協(xié)議 ,是一個 應用層 的協(xié)議。通常說的RTSP包括RTSP協(xié)議、RTP協(xié)議、RTCP協(xié)議。 RTSP協(xié)議:負責服務器與客戶端之間的請求與相應 RTP協(xié)議 :負責服務器與客戶端之間傳輸媒體數(shù)據(jù) RTCP協(xié)議:負責提供有關RTP傳輸指令的反饋,就是確保RTP傳輸?shù)馁|量 吧 三者關

    2024年04月26日
    瀏覽(28)
  • 【音視頻】基于webrtc協(xié)議瀏覽器播放rtsp

    【音視頻】基于webrtc協(xié)議瀏覽器播放rtsp

    現(xiàn)階段直播越來越流行,直播技術發(fā)展也越來越快。Webrtc和rtsp是比較火熱的技術,而且應用也比較廣泛。本文通過實踐來展開介紹關于rtsp、webrtc的使用過程。 本文是基于ffmpeg技術將mp4轉換為rtsp視頻流,并且將流推送到流媒體服務器(EasyDarwin)上,而后采用了webrtc-streamer對

    2024年01月19日
    瀏覽(29)
  • 音視頻項目—基于FFmpeg和SDL的音視頻播放器解析(二十一)

    介紹 在本系列,我打算花大篇幅講解我的 gitee 項目音視頻播放器,在這個項目,您可以學到音視頻解封裝,解碼,SDL渲染相關的知識。您對源代碼感興趣的話,請查看基于FFmpeg和SDL的音視頻播放器 如果您不理解本文,可參考我的前一篇文章音視頻項目—基于FFmpeg和SDL的音視

    2024年02月02日
    瀏覽(101)
  • 音視頻rtsp rtmp gb28181在瀏覽器上的按需拉流

    音視頻rtsp rtmp gb28181在瀏覽器上的按需拉流

    按需拉流是從客戶視角來看待音視頻的產品功能,直觀,好用,為啥hls flv大行其道也是這個原因,不過上述存在的問題是延遲沒法降到實時毫秒級延遲,也不能隨心所欲的控制。通過一段時間的努力,結合自己閉環(huán)技術棧,實現(xiàn)了h264 h265 aac pcma pcmu等音視頻的rtmp rtsp gb28181地

    2024年02月06日
    瀏覽(20)
  • ffmpeg點對點音視頻udp協(xié)議傳輸

    參考:https://zhuanlan.zhihu.com/p/636152437?utm_id=0 ffmpeg查看可用設備: 局域網內兩臺設備間 局域網內兩臺設備間

    2024年04月10日
    瀏覽(28)
  • Android平臺一對一音視頻通話方案對比:WebRTC VS RTMP VS RTSP

    Android平臺一對一音視頻通話方案對比:WebRTC VS RTMP VS RTSP

    一對一音視頻通話使用場景 一對一音視頻通話都需要穩(wěn)定、清晰和流暢,以確保良好的用戶體驗,常用的使用場景如下: 社交應用 :社交應用是一種常見的使用場景,用戶可以通過音視頻通話進行面對面的交流; 在線教育: 老師和學生可以通過音視頻通話功能進行實時互

    2024年02月13日
    瀏覽(24)
  • 【音視頻處理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的區(qū)別?直播協(xié)議詳解

    【音視頻處理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的區(qū)別?直播協(xié)議詳解

    ? 大家好,歡迎來到停止重構的頻道。 本期我們詳細討論 直播的相關協(xié)議 ,包括:HTTP-FLV、HLS、RTMP、Web-RTC、RTSP等等。 我們將會詳細介紹這些協(xié)議的工作原理、應用場景、及延遲的原因。 我們按這樣的順序討論? 1、??RTMP、HTTP-FLV? 2、??HLS? 3、??Web-RTC? 4、??RTSP? RTM

    2024年02月02日
    瀏覽(26)
  • 使用FFmpeg將本地文件通過UDP推流的音視頻

    推流是指將音視頻數(shù)據(jù)通過網絡傳輸?shù)街付ǖ哪繕硕?,而FFmpeg是一個功能強大的跨平臺多媒體處理工具,可以用于音視頻編解碼、轉碼、處理等操作。本文將介紹如何使用FFmpeg將本地文件通過UDP協(xié)議進行推流,實現(xiàn)音視頻數(shù)據(jù)的傳輸。 首先,需要確保已經安裝了FFmpeg工具。如

    2024年03月19日
    瀏覽(42)
  • 音視頻學習-音視頻基礎

    音視頻學習-音視頻基礎

    ` ? 像素:像素是一個圖片的基本單位,pix是英語單詞picture的簡寫,加上英語單詞“元素element”,就得到了“pixel”,簡稱px,所以“像素”有“圖像元素”之意。 ? 分辨率:是指圖像的大小或尺寸。比如1920x1080。 ? 位深:是指在記錄數(shù)字圖像的顏色時,計算機實際上是用

    2024年02月12日
    瀏覽(169)
  • Qt/C++音視頻開發(fā)24-視頻顯示QOpenGLWidget方式(占用GPU)

    采用painter的方式繪制解碼后的圖片,方式簡單易懂,巨大缺點就是占CPU,一個兩個通道還好,基本上CPU很低,但是到了16個64個通道的時候,會發(fā)現(xiàn)CPU也是很吃緊(當然強勁的電腦配置另當別論),這就需要考慮用opengl來繪制了,采用opengl走的GPU,會占用很少的CPU(一般是部

    2024年02月11日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包