libvlc3.0.4 增加錄影功能
最近做一個專案,需要播放流媒體。網上參考了很多,最終選了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原始碼編譯路上暢通無阻