使用libvlc進行視頻轉碼

昨天要在視頻轉寄程式裡增加轉碼功能:就是將輸入(流/檔案)轉碼成指定格式的視頻流和音頻流。研究了一下,發現vlc裡內建了轉碼功能,只不過參數設定比較麻煩。 我們具體的需求是:輸入:rtsp流或者udp組播資料(對設定轉碼參數來說,其實沒有區別)輸出:H264視頻(644k)+mp2音頻(56k),總碼率700k,ts封裝,使用udp轉寄到本地單播調用libvlc時的完整轉碼參數為: sendudp =

MonitorServer代碼閱讀筆記(一):使用sigaction( SIGPIPE, &sa, 0)避免寫一個已關閉的socket導致進程退出

開始閱讀MonitorServer的原始碼,記錄一些心得。 從main函數入手,開始幾行代碼如下:1 struct sigaction sa;2 sa.sa_handler = SIG_IGN;3 sigaction( SIGPIPE, &sa, 0);以前沒用過,不知道為什麼遙忽略SIGPIPE訊號,於是搜尋之,解釋如下:在linux下寫socket的程式的時候,如果嘗試send到一個disconnected

some code of debug mode

#include "common.h"#include "CIniFile.h"#include "CRecordCfg.h"#include "CFileFactory.h"#include "CCtrlThread.h"#include "CThread.h"#include "CDeleteThread.h"#include "CSendFileinfoThread.h"#include "CConfigExt.h"#include "CUtil.h"#include

64位系統下串連靜態庫報錯:“could not read symbols: Bad value”的解決辦法

公司來了新伺服器(64位系統),將項目從原來的伺服器(32位)上遷移過去後,編譯出錯:g++ -shared -o dist/Debug/GNU-Linux-x86/libGeoFlock.so -fPIC build/Debug/GNU-Linux-x86/GeoFlock.o build/Debug/GNU-Linux-x86/library.o build/Debug/GNU-Linux-x86/GeoCrawler.o

系統調用statfs()在大容量磁碟上會失敗

昨天在客戶現場部署一套錄製時,遇到一個小問題,且記錄下來。系統啟動後,日誌會警示: statfs error. strPath:/figure/datafile/recordfile5/FullRecord/StreamTS/1-1-東方衛視, Value too large for defined data type RepeatCount=34 經查問題如下:(1)我們的系統開啟了一個線程,不斷的掃描系統磁碟的使用方式。使用的是系統調用 statfs();struct statfs {

“沒有 pthread_create 的手冊頁條目”解決辦法

今天在項目中查看pthread_create()函數的手冊時,居然報沒有該手冊頁:1 chu@chu-laptop/monitor-center-cs$ man pthread_create2 沒有 pthread_create 的手冊頁條目 搜尋了一下,是要安裝一個包:“manpages-posix-dev”1 chu@chu-laptop:monitor-center-cs$ sudo apt-get install manpages-posix-dev

select用作定時

剛才查看select調用的資料時,發現網上這麼一種用法,且記下來: 1 //Socket伺服器端,在一個死迴圈中的代碼: 2 nsock = accept(sock, (struct sockaddr *)&sin, &len); 3 iFlag = fcntl(nsock, F_GETFL); 4 iFlag |= O_NONBLOCK; 5 alarm(2); 6 fcntl(nsock, F_SETFL, iFlag); 7 alarm(0); 8

兩種方法判斷boost線程是否在運行

情境:有類crawler,以及它的對象 _pService。crawler類中聲明了兩個boost thread成員變數:1 boost::thread m_workThrd;2 boost::thread

g++ 編譯錯誤: 程式中有游離的‘\357’

昨天將項目代碼放在Fedora Core8上面編譯時間,g++報錯:xxx.c:1: 錯誤: 程式中有游離的‘\357’xxx:1: 錯誤: 程式中有游離的‘\273’xxx.c:1: 錯誤: 程式中有游離的‘\277’  而之前在Fedora Core12上面編譯都沒問題, 於是搜尋了一下,發現是檔案編碼的問題:這是由於該檔案是以UTF-8 BOM的形式儲存的,而所用的編譯器不支援這種格式。 http://blog.csdn.net/hunhunzi/article/details/67104

測試大小端方法

在cu上看到一種測試大小端的方法,且記下來:核心中摳出來的一個測試大小端的程式,非常好,而且簡練。核心的技巧真是無處不再阿. /* *author:qqbsd *email:qqbsd.zhou@gmail.com */ #include stdio.h> static union { char c[4]; unsigned long l; } endian_test = { {'l','?','?','b'} }; #define ENDIANNESS

pkg-config尋找lib路徑

netbeans中添加依賴庫時,有幾種類型,一直不太明白他們的區別: 我們用pkgonfig庫添加了kyotocabinet,最終在makefile中產生了編譯選項:`pkg-config --libs kyotocabinet`。下面來研究一下:(1)整個命令用了``,應該表示將``中命令執行的結果傳給makefile,在shell中這樣的,這裡應該也差不多;(2)pkg-config是shell命令,具體介紹如下:1.什麼是configure

Fedora Core12的防火牆會過濾掉部分IP資料包,在開發調試時建議關閉防火牆

今天繼續完成視頻轉寄工具,使用udp監聽本地的8003連接埠,接收使用者發送的視頻轉寄請求。程式完成了,自己寫個小工具類比資料請求,來測試程式是否正常工作。這時候,出問題了。 測試步驟:(1)在虛擬機器(Fecdora Core12)裡運行程式(2)在主機裡使用工具發送類比請求(3)查看程式是否正常工作但是,結果是:虛擬機器Fecord Core12裡監聽的socket一直無法接收到主機發送的udp資料包,使用lsof -i查看,程式確實開啟了監聽連接埠:[root@chu xsock]#

Debian設定root登入&root自動登入

Debian預設不允許root登入,所以修改之。(1)讓Debian以root登入修改gdm3的登入pam檔案#vi /etc/pam.d/gdm3將auth required pam_succeed_if.so user != root quiet_success注釋掉 //本行前加#重啟即可(2)讓Debian以root自動登入。首先修改gdm3的設定檔案#vi /etc/gdm3/deamon.confAutomaticLogin = false

使用類/結構體作為boost::unordered_map中的key時需要實現hash_value函數

有如下結構體: 1 typedef struct _client_msg 2 { 3 _client_msg(int clientID, int msgValue) 4 { 5 this->clientID = clientID; 6 this->msgValue = msgValue; 7 } 8 9 int clientID;10 int msgValue;11

學習openssl中的hash演算法

項目中實現了checksum服務,看了下實現,用的是openssl庫中的hash演算法。很簡單的一個實現如下: 1 std::string ChecksumImplement::SHA1(const std::string & str) 2 { 3 unsigned char sha1_digest[SHA1_DIGEST_LENGTH] = {0}; 4

netbeans添加現有源檔案時自動更新Makefile依賴關係

要做一個視頻轉寄的小工具,使用netbeans建好工程後,需要使用其他項目中使用的一些基礎類,於是使用“從檔案夾中添加現有項”功能,將需要的源檔案和標頭檔成功添加到項目中。但是在編譯項目時,由於這些匯入的檔案沒有被添加到Makefile中,沒有被編譯成目標檔案,在串連時會報錯:1 build/Debug/GNU-Linux-x86/main.o: In function `main':2 VideoTransmit/main.cpp:17: undefined reference to

用swap方法強行釋放STL容器佔用的記憶體

項目中用到了vector,list,set等容器,運行完畢後需要清理,以釋放記憶體以降低記憶體開銷。一開始我直接使用clear()函數來釋放,實際觀察下來,記憶體並沒有被釋放。 經同事提醒,clear()並不能釋放記憶體,需要使用swap來釋放。於是查了一下,找到以下資料:vector與deque不同,其記憶體佔用空間只會增長,不會減小。比如你首先分配了10,000個位元組,然後erase掉後面9,999個,則雖然有效元素只有一個,但是記憶體佔用仍為10,000個。所有空間在vector析構時回

fork() & 殭屍進程

上周,項目裡需要一個視頻轉寄工具,我用libvlc完成了一個,大致流程如下:(1)主進程監聽指定連接埠,接收轉寄請求;(2)驗證請求合法性後,主進程fork一個子進程,在子進程中啟動vlc進行轉寄。 但調試時發現了一個小問題:fork出子進程後,在父進程中沒有調用waitpid,在子進程退出後, 父進程沒有為它“收屍”。於是乎,子進程雖然退出了,但進程號在系統曆仍然存在,變成了臭名昭著的“殭屍進程”。問題的根源在於:父進程沒有調用waitpid來監測子進程的活動狀況,關於waitpid能幹什麼,

UUID performance產生uuid的效能問題

項目中需要將原有的id統一改為uuid,於是直接用boost中的uuid庫來產生uuid。但在測試中發現程式效能嚴重下降,原來每分鐘能處理60萬條資料,使用uuid後只能處理2萬條左右。於是跟蹤之,先看我們的實現方式:1 static std::string uuid()2 {3 boost::uuids::uuid uuid = boost::uuids::random_generator()();4 return

使用boost::condition實現線程的暫停/啟動

在項目中需要實現pause/resume功能,用boost::condition實現大致如下:1 class Geo2 {3 ...4 bool m_bPauseFlag;5 boost::condition m_pause_cond;6 boost::mutex m_pause_mutex;7 boost::mutex m_pauseflag_mutex;8 9 }實現: 1 void Geor::pause() 2 { 3 LOG_DEBUG(

總頁數: 61357 1 .... 12201 12202 12203 12204 12205 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.