VLC做客戶端解Rtsp碼流

RTSP流解碼爲RGBA數據。

VLC版本2.1.3

vs 2008.



爲了從Rtsp地址獲取實時幀數據,看了Live555和VLC的一些Demo。


VLC作爲Rtsp的客戶端,拉網絡視頻流。然後進行實時解碼(內部進行),自己獲得碼流(RGBA數據,32位RGB),顯示.

</pre><pre name="code" class="cpp">介紹就不說了,基本流程。
1. libvlc_new
2. libvlc_media_new_location
3. libvlc_media_player_new_from_media
   libvlc_media_release
4. libvlc_video_set_callbacks
   libvlc_video_set_format
   
   如果僅僅只想顯示,第四步驟換爲:
   libvlc_media_player_set_hwnd
5. libvlc_media_player_play

loop

6. libvlc_media_player_release
   libvlc_release



if(m_bNew == true)
	{
		m_bNew = false;

		m_vlcMedia = libvlc_media_new_location(m_vlcInst, "rtsp://碼流地址");

		m_vlcMplay = libvlc_media_player_new_from_media(m_vlcMedia);
		libvlc_media_release(m_vlcMedia);

		libvlc_media_player_set_hwnd(m_vlcMplay, m_hWndVideo);
		libvlc_video_set_callbacks(m_vlcMplay, libvlc_video_lock_cb_callback, libvlc_video_unlock_cb_callback, libvlc_video_display_cb_callback, 0);
		libvlc_video_set_format(m_vlcMplay, "RGBA", width, height, width*4);
	}
	
	int res = libvlc_media_player_play(m_vlcMplay);


爲了獲得實時流,就需要進行回調libvlc_video_set_callbacks

就需要設置三個回調, 我們需要獲得buffer的大小,視頻的width和height,buffer大小爲width*height*4。在lock函數中需要鎖住,在unlock中解鎖。幹活在display中,

這裏爲了方便,直接利用opencv顯示出來了。

原先用CMutex類和CSinglelock進行鎖,結果一直出問題,就自己弄了兩個函數。目前在單個視頻流還沒問題。


這裏比較重要的是,display會將 *planes  賦值,數據指針,就必須傳給*planes。 


void *libvlc_video_lock_cb_callback(void *opaque, void **planes)
{
	Lock();
	memset(buffer, 0, sizeof buffer);
	*planes = buffer;
	return NULL;
}
void libvlc_video_unlock_cb_callback(void *opaque, void *picture,
							   void *const *planes)
{	
	Unlock();
}


void libvlc_video_display_cb_callback(void *opaque, void *picture)
{
	if (Islock())
	{
		IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 4);
		img->imageData = buffer;
		cvShowImage(name, img);
		cvWaitKey(10);
		cvReleaseImage(&img);
		//fwrite(buffer, sizeof buffer, 1, fp);
	}
}

BOOL lock = FALSE;
void Lock()
{
	lock = TRUE;
}
void Unlock()
{
	lock = FALSE;
}
BOOL Islock()
{
	return lock;
}



VLC Doxygen文檔: http://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc.html


VLC網址: videolan.org


VLC Documentation: https://wiki.videolan.org/LibVLC/


VLC維護人員?不知道是不是: http://www.jbkempf.com/blog/


VLC平臺編譯: http://jeremiah.blog.51cto.com/539865/114550


VS編譯VLC方法: http://wenku.baidu.com/link?url=i91eXbrOY7Gf-8tO1TG6J7BWC7lIOZtheFSQ9YRaTuMD1kQowxQUFdX--LmYyTMnZAVU4NHdJ6VoztRnZmLpeTJQ2XXnFxadX97bfRWHnDq


VLC簡介及使用說明、編譯: http://blog.csdn.net/zhoujiaxq/article/details/9958793


windows使用libvlc進行網絡串流遇到的一些問題及解決方法: http://www.cnblogs.com/youfal/p/3830830.html

發佈了31 篇原創文章 · 獲贊 21 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章