live555forandroid
❶ Android 中實時獲取戶外監控攝像頭的視頻信息怎麼做
Android中實時獲取戶外監控攝像頭的視頻信息的方法為:
1、使用FFMpeg進行視頻採集,使用Live555進行RTP傳輸,使用VideoView進行播放。
csdn提到:重載FrameSource,寫一個服務類,可以從FrameSource的派生類讀取幀數據,轉發給live555.
評價:本方案大型訪問量大的不行,少量連接比如100以內的可以。
2、用gstreamer完成採集、編碼、組播。客戶端使用VideoView進行播放。
評價:本方案優點為可以實現大訪問量。缺點是基本從底層架構,代碼量比較大。
3、使用FFmpeg進行視頻採集,使用ffserver進行視頻轉發,客戶端使用VideoView播放。
評價:優點是實現簡單、容易演示,缺點是實時性不好以及用戶量大不行。
❷ live555推送1080p花屏
最近一直研究live555推送rtsp流到easydarwin,實現轉發,但是遇到一個問題:live555推送之後的視頻流出現花屏,在網上搜羅一大圈之後找到一個答案,就是live555內部OutPacketBuffer默認大小隻有60000,即是unsigned OutPacketBuffer::maxSize = 60000;當我推送1080p視頻流的時散橡候,用vlc播放,出現部分視頻是花的,主要就是緩沖區太小了,將這個值改大一點即可,目前測試改成288000,視頻不會出現花屏,問題完美解決。
1、大數據幀花屏
live555推送之後的視頻流出現花屏,查看源碼DynamicRTSPServer.cpp文件,源碼如下:
sms->addSubsession(::createNew(env, fileName, reuseSource));
} else if (strcmp(extension, ".264") == 0) {
// Assumed to be a H.264 Video Elementary Stream file:
NEW_SMS("H.264 Video");
OutPacketBuffer::maxSize = 100000; // allow for some possibly large H.264 frames
sms->addSubsession(::createNew(env, fileName, reuseSource));
} else if (strcmp(extension, ".265") == 0) {
// Assumed to be a H.265 Video Elementary Stream file:
NEW_SMS("H.265 Video");
OutPacketBuffer::maxSize = 100000; // allow for some possibly large H.265 frames
sms->addSubsession(::createNew(env, fileName, reuseSource));
} else if (strcmp(extension, ".mp3") == 0) {
// Assumed to be a MPEG-1 or 2 Audio file:
NEW_SMS("MPEG-1 or 2 Audio")
查看上面紅色部分對於H264和H265輸出包最大緩沖100000位元組(100K),對於高清視頻緩沖區太小了,必需更改大些。目前更改到沖雹旁800000,對於1080P視頻使用VLC播放時,不會再出現花屏。
2、循環播放文件
在liveMedia庫下的ByteStreamFileSource.cpp文件中的95行,找到
void ByteStreamFileSource::doGetNextFrame() {
if (feof(fFid) || ferror(fFid) || (fLimitNumBytesToStream && fNumBytesToStream == 0)) {
handleClosure();
return;
}
更改為
void ByteStreamFileSource::doGetNextFrame() {
if (feof(fFid) || ferror(fFid) || (fLimitNumBytesToStream && fNumBytesToStream == 0)) {
//handleClosure();
//肆賀return;
fseek(fFid, 0, SEEK_SET);
}
主要思想為,當文件讀完後不讓關閉文件,而是重新讀取文件。經過測試,當VLC關閉RTSP鏈接後,文件會關閉,重新打開其他文件不受影響。
❸ 請問RTSP一定要使用AAC格式來做live audio streaming嗎
你好!!!真的很感謝你的回覆!!!我接觸Android不久我參考Spydroid,在手機上建起了RTSP
ServerSpydroid原本的作法是
從mic讀取PCM
->
編碼成AAC
->
封裝成RTP封包
->
傳送我的想法
從手機本地讀取mp3或wav
->
封裝成RTP封包->
傳送那在請問,同樣都是RTSP
Streaming,Spydroid跟Live555在效率上會有差別嗎?因為我嘗試編出Live555的so檔案,但不知道要如何調用Live555讓RTSP
Server開啟...想回到Spydroid,試著直接將mp3不編碼,直接封裝到RTP封包,在做傳送所以不知道該使用哪個想法比較好...