1. 程式人生 > >live555對於實時音視訊的支援

live555對於實時音視訊的支援

live555本身,可以支援將檔案作為源,提供RTSP播放伺服器功能。
為了使live555能夠支援實時流的播放,需要進行改造。
有兩種方式:
1,一個比較簡單,可以使用管道檔案的方式。缺點是當碼流較大時,
   會明顯的卡頓、馬賽克。(測試超過80K時會卡得非常厲害)
2,再一個,需要自己過載source,submission類。在其中實現資料的對接。
下面分別介紹一下這兩種方式


一、管道方式:
1,開啟live/testProgs/testOnDemandRTSPServer.cpp,修改reuseFirstSource的值為True,並編譯之
2,參考該程式的引數,即可實現檔案的播放。而我們將其指向管道檔案
2,mkfifo live/testProgs/test.264
3,寫自己的程式,將H264編碼的資料write到test.264管道中。就普通的open,write即可
注意,在寫入端,注意攔截SIGPIPE訊號。signal(SIGPIPE, _sighandle). 原因是,當rtsp端關閉流時,
 會導致SIGPIPE發生,並退出程式。但其實我們可能不想退出。


二、重寫source
1,編寫類:LiveServerMediaSubsession: public OnDemandServerMediaSubsession
2,對於H264編碼而言,我們可以把H264VideoFileServerMediaSubsession原樣抄過來,在其基礎上修改
3,去掉無用的引數,重寫createNewStreamSource。裡面換成一個新類:FrameLiveSource做輸入Source
4,編寫類:FramedLiveSource: public FramedSource
5,有幾個函式需要完成:
1)maxFrameSize,最大幀的大小。
2)doGetNextFrame(); 關鍵函式,負責獲取資料。核心程式碼如下:
memcpy(fTo, buffer, len);
gettimeofday(&fPresentationTime, NULL);
fFrameSize = len;
nextTask() = envir().taskScheduler().scheduleDelayedTask(0,
(TaskFunc*)FramedSource::afterGetting, this);
3)isH264VideoStreamFramer。當資料準備好時,該函式返回True
6,後面就簡單了,只要把doGetNextFrame和正常的實時視訊資料聯絡起來,一切就解決了。




三、live555的下載、編譯方式
1,網站上下載live555,網址:http://www.live555.com/liveMedia/
2,./genMakefile linux
3,make
其中,./genMakefile linux,是對應config.linux來的。
我們可以參考config.armlinux修改成自己所需的版本


五、音訊SERVER的實現 使用G726-40
共需要兩個類:
1,class FramedAudioSource : public FramedSource
1)只要實現一個:doGetNextFrame即可,關鍵程式碼如下:
int len = Get_Data(fTo, fMaxSize);
if (len <= 0)
{//獲取不到資料時,一定要起個檢查定時器。否則程式就停止了
//nextTask() = envir().taskScheduler().scheduleDelayedTask(...
}
fFrameSize = len;
FramedSource::afterGetting(this);
2,建立OnDemandServerMediaSubsession的子類,AudioServerMediaSubssion
1)實現兩個介面:createNewRTPSink和createNewStreamSource
2)createNewStreamSource使用FramedAudioSource建立
3)createNewRTPSink
RTPSink* AudioServerMediaSubsession::createNewRTPSink(Groupsock* rtpGroupsock,
unsigned char rtpPayloadTypeIfDynamic, FramedSource* inputSource) {
return SimpleRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic,
m_timeStampFrequency, "audio", m_audioType, 1, False, False);
}
這個函式中,關鍵的有:
m_timeStampFrequency,根據實際情況填寫16000或者8000等取樣率
m_audioType,編碼方式,例如:"G726-40"。這個準確的定義,請參照MediaSession::createSourceObjects中的內容



六、音訊與視訊同時提供
這個就簡單了,只要sms->addSubsession多來幾次,新增多個Subsession即可。


最後、其它遇到的問題:
1,當連線斷開時,FrameLiveSource會被釋放。再連線時重新建立。所以要做好資料的釋放與分配的處理
 同時也要注意資料釋放的瞬間,多執行緒非同步問題導致的問題
2,StreamParser.cpp中,BANK_SIZE的大小,需要做對應的修改,以便容納足夠大的資料
3,env(),這個東西一定要關心。繼承一個類,實現setResultMsg可用於輸出live555本身的一些資訊。

相關推薦

live555對於實時視訊支援

live555本身,可以支援將檔案作為源,提供RTSP播放伺服器功能。 為了使live555能夠支援實時流的播放,需要進行改造。 有兩種方式:1,一個比較簡單,可以使用管道檔案的方式。缺點是當碼流較大時,   會明顯的卡頓、馬賽克。(測試超過80K時會卡得非常厲害)2,再一

live555 實時視訊(H264 & PCMA)

效果圖如下: //-------------------------------------------------------------------------------------------------------------------------

從零到一,使用實時視訊 SDK 一起開發一款 Zoom 吧

zoom(zoom.us) 是一款受到廣泛使用的線上會議軟體。相信各位一定在辦公、會議、聊天等各種場景下體驗或者使用過,作為一款成熟的商業軟體,zoom 提供了穩定的實時音視訊通話質量,以及白板、聊天、螢幕共享、PPT放映等常用功能。但是在當今瀏覽器成為端上主流的時代,實時音視訊又怎甘於落後呢?相比

開源實時視訊技術WebRTC中RTP/RTCP資料傳輸協議的應用

1、前言 RTP/RTCP協議是流媒體通訊的基石。RTP協議定義流媒體資料在網際網路上傳輸的資料包格式,而RTCP協議則負責可靠傳輸、流量控制和擁塞控制等服務質量保證。在WebRTC專案中,RTP/RTCP模組作為傳輸模組的一部分,負責對傳送端採集到的媒體資料進行進行封包,然後交給上層網路模組

AR+ 實時視訊通話,虛擬與現實無縫結合

今年中旬 Google 在萬眾期待下推出了 ARCore,能將現實與數碼完美無縫地融合在一起,豐富我們的現實世界。通過它開發者可以更加快速方便地在 Android 平臺開發 AR 應用,憑藉 AR 技術大量產品能找到新穎的應用場景,甚至開闢出新的一條產品線。 目前市場上已經有不少基於 AR 技術的產品,例如

AR+ 實時視訊通話,×××無縫結合

今年中旬 Google 在萬眾期待下推出了 ARCore,能將現實與數碼完美無縫地融合在一起,豐富我們的現實世界。通過它開發者可以更加快速方便地在 Android 平臺開發 AR 應用,憑藉 AR 技術大量產品能找到新穎的應用場景,甚至開闢出新的一條產品線。 目前市場上已經有不少基於 AR 技術的產品,例如

18個實時視訊開發中會用到開源專案(轉)

本文轉載自部落格:https://blog.csdn.net/dittychen/article/details/79345828 ----------------------------------------------------------------------------------

打造專遞課堂,即構成為希沃專遞課堂實時視訊技術唯一提供方

日前,在南昌舉辦的第75屆中國教育裝備展上,希沃和即構zego打造的互動錄播方案亮相。現場將展廳設定為授課教室,廣州、贛州、南昌三個分會場為聽課教室,以每分鐘一場的高頻次互動演示,模擬了身處不同地區的4個教室的互動教學,現場效果令人震撼。 據瞭解,該方案也稱“專遞課堂”,目前已在江西、雲南

中老年人計算機基礎與應用培訓通知18個實時視訊開發中會用到開源專案

  實時音視訊的開發學習有很多可以參考的開源專案。一個實時音視訊應用共包括幾個環節:採集、編碼、前後處理、傳輸、解碼、緩衝、渲染等很多環節。每一個細分環節,還有更細分的技術模組。比如,前後處理環節有美顏、濾鏡、回聲消除、噪聲抑制等,採集有麥克風陣列等,編解碼有VP8、VP9、H.264、H.

QOS FEC NACK 實時視訊傳輸庫測試報告(聲網、騰訊實時視訊測試)

目錄 實驗環境 測試項說明 測試結果 競品分析 總結                     QOS FEC NACK 實時音視訊傳輸庫測試報告 QOS-FEC-NACK傳輸庫簡介 QOS-FEC-NACK是一套集FEC前向糾錯、

如何用 React Native 開發實時視訊應用

對於 Web、iOS、Android 開發者來講,React Native 給跨平臺開發工作帶來了很大的幫助。僅用 JavaScript 就可以建立運行於移動端的應用。同時,你也可以將 React Native 程式碼與 Native 程式碼結合,不論你是用 Objective C、Java 還是用 Sw

WebRTC實時視訊技術基礎:基本架構和協議棧

概述 本文主要介紹WebRTC的架構和協議棧。 最基本的三角形WebRTC架構 為了便於理解,我們來看一個最基本的三角形WebRTC架構(見下圖): 在這個架構中,行動電話用“瀏覽器M”表示,膝上型電腦用“瀏覽器L”表示,通過Web伺服器將它們連線起來。要建立

如何為實時視訊設計小且優的深度學習模型?

在 GDG 組織的 DevFest 2018 上,聲網Agora 首席科學家鐘聲與在座的上千位開發者分享了演講《Deep Learning for MobilePlatforms: Complexity and Performance Analysis》。以下是由 GDG 整理髮布的演講實錄。

實時視訊技術(WebRTC/voip/Linphone/P2P)

  視訊社交與語音社交???    實時視訊(直播)/語音通訊。多媒體技術團隊在音視訊編解碼、前後處理、傳輸等技術;   在語音社交、視訊社交、遊戲語音和互動直播等領域,關於在語音視訊實時傳輸中實現低延遲這個議題,已經有不少的文章提出各種方案。絕大部分方案的思路都是“優化”,

微信小程式實時視訊開發記錄

    以前做過一個簡單的小程式,但是到現在回想怎麼開發小程式,竟然一點也想不起來,鑑於學過的東西老是忘掉毛病,現在借專案需要小程式音視訊功能,記錄一下小程式開發步驟和小程式視訊音視訊功能的使用。    由於完全不記得小程式開發步驟和程式碼結構,只有重頭開始學習,我首先閱讀了

RTP實時視訊資料傳輸,傳送端和接收端

1.專案前期工作(配置好環境) 2.傳送端檔案編寫(見下面的send.cpp) 3.接收端檔案編寫(見下面的receive.cpp) 4.編譯檔案 (1)傳送端                       g++ -o send send.cpp -I /usr/loca

微信小程式 實時視訊開發

   以前做過一個簡單的小程式,但是到現在回想怎麼開發小程式,竟然一點也想不起來,鑑於學過的東西老是忘掉毛病,現在借專案需要小程式音視訊功能,記錄一下小程式開發步驟和小程式視訊音視訊功能的使用。    由於完全不記得小程式開發步驟和程式碼結構,只有重頭開始學習,我首先閱讀了官

實時視訊直播新玩法中的混技術

作者|冼牛 編輯|覃雲 最近半年,視訊直播領域中產生不少創新玩法,其中包括 K 歌直播和合唱直播。這些創新玩法都用到實時音訊混音技術。今天我們來聊一下混音技術的實現,及其在創新玩法中的應用。 混音的應用場景 混音,顧名思義,就是把兩路或者多路音訊流混合在一

開發一個實時視訊通訊系統,你需要什麼技術儲備?

RTC(real time communication)實時通訊系統是最近網際網路應用的一個新領域。RTC系統的應用極其廣泛,我們常見的視訊電話,會議系統,遠端桌面與控制都是RTC系統的一個應用。在移動網際網路飛速發展的今天,各種應用都渴望加入RTC的功能,實現使用者與企

Live555用做RTSPClient時,利用RTP時間戳進行視訊同步的解決方案(必須有RTCP支援才可行)

http://www.mworkbox.com/wp/work/551.html 先看來自Live555官網的2個常見問題: 問題1:Why do most RTP sessions use separate streams for audio and video?