libvlc3.0.x增加錄像功能

最近做一個項目,需要播放流媒體。網上參考了很多,最終選了vlc。開發到一半,發現libvlc庫沒有錄像接口,在網上搜了很多資料,總結如下:

具體方法如下:

一、修改源代碼

1、修改vlc-3.0.4/lib目錄下的video.c文件中新增接口libvlc_video_toggle_record( libvlc_media_player_t *p_mi, const char *psz_filepath,  const char *psz_filename );建議放在libvlc_video_take_snapshot()這個函數後面

int libvlc_video_toggle_record( libvlc_media_player_t *p_mi,
								const char *psz_filepath, 
								const char *psz_filename )
{
	assert( psz_filepath );
	assert( psz_filename );

	input_thread_t *p_input = libvlc_get_input_thread( p_mi );
	if(p_input == NULL)
		return -1;	
	var_Create( p_input, "input-record-path", VLC_VAR_STRING );
	var_SetString( p_input, "input-record-path", psz_filepath );	
	var_Create( p_input, "record-video-name", VLC_VAR_STRING );
	var_SetString( p_input, "record-video-name", psz_filename );
	var_ToggleBool( p_input, "record");
	vlc_object_release(p_input);
	return 0;
}

然後,在vlc-3.0.4/vlc/libvlc_media_player.h中添加LIBVLC_API int libvlc_video_toggle_record( libvlc_media_player_t *p_mi, const char *psz_filepath,  const char *psz_filename );

最後,在vlc-3.0.4/lib/libvlc.sym文件中添加libvlc_video_toggle_record。建議放在libvlc_video_take_snapshot之後。這一步不能少,否則在libvlc.dll沒有這個函數接口

2、第一,需要修改vlc-3.0.4/modules/stream_filter/record.c文件中Start().在start()中,

把psz_file = input_CreateFilename( s->p_input, psz_path, INPUT_RECORD_PREFIX, psz_extension );

替換爲

char *psz_recordVideoFileName = var_CreateGetNonEmptyString( s->p_input, "record-video-name" );
psz_file = input_CreateFilename( s->p_input, psz_path, psz_recordVideoFileName, psz_extension );

------------------------------------------------------

第二,修改vlc-3.0.4/input/es_out.c中EsOutSetRecord()函數,把

char *psz_file = input_CreateFilename( p_input, psz_path, INPUT_RECORD_PREFIX, NULL );

替換爲

 char *psz_recordVideoFileName = var_CreateGetNonEmptyString( p_input, "record-video-name" );
 char *psz_file = input_CreateFilename( p_input, psz_path, psz_recordVideoFileName, NULL );

若想任意設置錄像文件的名稱,這一步必須做。若用libvlc默認錄像文件名稱,這一步可省略。

二、編譯源代碼:

基於已經編譯過的環境(偶的編譯環境:win10,虛擬機下安裝ubutnu 16.04LTS,編譯win32 libvlc),切換到vlc-3.0.4/win32目錄下,

執行sudo make,

然後打包生成windows相關文件的操作:make package-win-common

在win32下面生成vlc-3.0.4文件夾,然後

cd vlc-3.0.4
find  .  -name  "*.dll"  -type  f  |  xargs  -i  strip  --strip-all  {} 去掉調試信息

win32/vlc-3.0.4文件夾即是我們需要的內容

寫在最後:

關於libvlc3.0.4源碼編譯步驟,傳送門:https://blog.csdn.net/zhuquanfu/article/details/83505531   

非常感謝@憑欄望月的【vlc3.0.4在ubuntu16.04x64上的交叉編譯全過程記錄】這邊文章,在libvlc源碼編譯路上暢通無阻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章