/* * Copyright (c) 2018-2021 Taner Sener * * This file is part of FFmpegKit. * * FFmpegKit is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FFmpegKit is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with FFmpegKit. If not, see . */ #ifndef FFMPEG_KIT_CONFIG_H #define FFMPEG_KIT_CONFIG_H #import #import #import #import #import "FFmpegSession.h" #import "FFprobeSession.h" #import "LogCallback.h" #import "MediaInformationSession.h" #import "StatisticsCallback.h" /** Global library version */ extern NSString* const FFmpegKitVersion; typedef NS_ENUM(NSUInteger, Signal) { SignalInt = 2, SignalQuit = 3, SignalPipe = 13, SignalTerm = 15, SignalXcpu = 24 }; /** *

Configuration class of FFmpegKit library. Allows customizing the global library * options. Provides helper methods to support additional resources. */ @interface FFmpegKitConfig : NSObject /** *

Enables log and statistics redirection. * *

When redirection is enabled FFmpeg/FFprobe logs are redirected to NSLog and sessions * collect log and statistics entries for the executions. It is possible to define global or * session specific log/statistics callbacks as well. * *

Note that redirection is enabled by default. If you do not want to use its functionality * please use disableRedirection method to disable it. */ + (void)enableRedirection; /** *

Disables log and statistics redirection. * *

When redirection is disabled logs are printed to stderr, all logs and statistics * callbacks are disabled and FFprobe's getMediaInformation methods * do not work. */ + (void)disableRedirection; /** *

Sets and overrides fontconfig configuration directory. * * @param path directory that contains fontconfig configuration (fonts.conf) * @return zero on success, non-zero on error */ + (int)setFontconfigConfigurationPath:(NSString*)path; /** *

Registers the fonts inside the given path, so they become available to use in FFmpeg * filters. * *

Note that you need to build FFmpegKit with fontconfig * enabled or use a prebuilt package with fontconfig inside to be able to use * fonts in FFmpeg. * * @param fontDirectoryPath directory that contains fonts (.ttf and .otf files) * @param fontNameMapping custom font name mappings, useful to access your fonts with more * friendly names */ + (void)setFontDirectory:(NSString*)fontDirectoryPath with:(NSDictionary*)fontNameMapping; /** *

Registers the fonts inside the given array of font directories, so they become available * to use in FFmpeg filters. * *

Note that you need to build FFmpegKit with fontconfig * enabled or use a prebuilt package with fontconfig inside to be able to use * fonts in FFmpeg. * * @param fontDirectoryList array of directories that contain fonts (.ttf and .otf files) * @param fontNameMapping custom font name mappings, useful to access your fonts with more * friendly names */ + (void)setFontDirectoryList:(NSArray*)fontDirectoryList with:(NSDictionary*)fontNameMapping; /** *

Creates a new named pipe to use in FFmpeg operations. * *

Please note that creator is responsible of closing created pipes. * * @return the full path of the named pipe */ + (NSString*)registerNewFFmpegPipe; /** *

Closes a previously created FFmpeg pipe. * * @param ffmpegPipePath full path of the FFmpeg pipe */ + (void)closeFFmpegPipe:(NSString*)ffmpegPipePath; /** *

Returns the version of FFmpeg bundled within FFmpegKit library. * * @return the version of FFmpeg */ + (NSString*)getFFmpegVersion; /** * Returns FFmpegKit library version. * * @return FFmpegKit version */ + (NSString*)getVersion; /** *

Returns whether FFmpegKit release is a Long Term Release or not. * * @return true/yes or false/no */ + (int)isLTSBuild; /** * Returns FFmpegKit library build date. * * @return FFmpegKit library build date */ + (NSString*)getBuildDate; /** *

Sets an environment variable. * * @param variableName environment variable name * @param variableValue environment variable value * @return zero on success, non-zero on error */ + (int)setEnvironmentVariable:(NSString*)variableName value:(NSString*)variableValue; /** *

Registers a new ignored signal. Ignored signals are not handled by FFmpegKit * library. * * @param signal signal to be ignored */ + (void)ignoreSignal:(Signal)signal; /** *

Synchronously executes the FFmpeg session provided. * * @param ffmpegSession FFmpeg session which includes command options/arguments */ + (void)ffmpegExecute:(FFmpegSession*)ffmpegSession; /** *

Synchronously executes the FFprobe session provided. * * @param ffprobeSession FFprobe session which includes command options/arguments */ + (void)ffprobeExecute:(FFprobeSession*)ffprobeSession; /** *

Synchronously executes the media information session provided. * * @param mediaInformationSession media information session which includes command options/arguments * @param waitTimeout max time to wait until media information is transmitted */ + (void)getMediaInformationExecute:(MediaInformationSession*)mediaInformationSession withTimeout:(int)waitTimeout; /** *

Starts an asynchronous FFmpeg execution for the given session. * *

Note that this method returns immediately and does not wait the execution to complete. * You must use an FFmpegSessionCompleteCallback if you want to be notified about the result. * * @param ffmpegSession FFmpeg session which includes command options/arguments */ + (void)asyncFFmpegExecute:(FFmpegSession*)ffmpegSession; /** *

Starts an asynchronous FFmpeg execution for the given session. * *

Note that this method returns immediately and does not wait the execution to complete. * You must use an FFmpegSessionCompleteCallback if you want to be notified about the result. * * @param ffmpegSession FFmpeg session which includes command options/arguments * @param queue dispatch queue that will be used to run this asynchronous operation */ + (void)asyncFFmpegExecute:(FFmpegSession*)ffmpegSession onDispatchQueue:(dispatch_queue_t)queue; /** *

Starts an asynchronous FFprobe execution for the given session. * *

Note that this method returns immediately and does not wait the execution to complete. * You must use an FFprobeSessionCompleteCallback if you want to be notified about the result. * * @param ffprobeSession FFprobe session which includes command options/arguments */ + (void)asyncFFprobeExecute:(FFprobeSession*)ffprobeSession; /** *

Starts an asynchronous FFprobe execution for the given session. * *

Note that this method returns immediately and does not wait the execution to complete. * You must use an FFprobeSessionCompleteCallback if you want to be notified about the result. * * @param ffprobeSession FFprobe session which includes command options/arguments * @param queue dispatch queue that will be used to run this asynchronous operation */ + (void)asyncFFprobeExecute:(FFprobeSession*)ffprobeSession onDispatchQueue:(dispatch_queue_t)queue; /** *

Starts an asynchronous FFprobe execution for the given media information session. * *

Note that this method returns immediately and does not wait the execution to complete. * You must use an MediaInformationSessionCompleteCallback if you want to be notified about the result. * * @param mediaInformationSession media information session which includes command options/arguments * @param waitTimeout max time to wait until media information is transmitted */ + (void)asyncGetMediaInformationExecute:(MediaInformationSession*)mediaInformationSession withTimeout:(int)waitTimeout; /** *

Starts an asynchronous FFprobe execution for the given media information session. * *

Note that this method returns immediately and does not wait the execution to complete. * You must use an MediaInformationSessionCompleteCallback if you want to be notified about the result. * * @param mediaInformationSession media information session which includes command options/arguments * @param queue dispatch queue that will be used to run this asynchronous operation * @param waitTimeout max time to wait until media information is transmitted */ + (void)asyncGetMediaInformationExecute:(MediaInformationSession*)mediaInformationSession onDispatchQueue:(dispatch_queue_t)queue withTimeout:(int)waitTimeout; /** *

Sets a global log callback to redirect FFmpeg/FFprobe logs. * * @param logCallback log callback or nil to disable a previously defined log callback */ + (void)enableLogCallback:(LogCallback)logCallback; /** *

Sets a global statistics callback to redirect FFmpeg statistics. * * @param statisticsCallback statistics callback or nil to disable a previously defined statistics callback */ + (void)enableStatisticsCallback:(StatisticsCallback)statisticsCallback; /** *

Sets a global FFmpegSessionCompleteCallback to receive execution results for FFmpeg sessions. * * @param ffmpegSessionCompleteCallback complete callback or nil to disable a previously defined callback */ + (void)enableFFmpegSessionCompleteCallback:(FFmpegSessionCompleteCallback)ffmpegSessionCompleteCallback; /** *

Returns the global FFmpegSessionCompleteCallback set. * * @return global FFmpegSessionCompleteCallback or nil if it is not set */ + (FFmpegSessionCompleteCallback)getFFmpegSessionCompleteCallback; /** *

Sets a global FFprobeSessionCompleteCallback to receive execution results for FFprobe sessions. * * @param ffprobeSessionCompleteCallback complete callback or nil to disable a previously defined callback */ + (void)enableFFprobeSessionCompleteCallback:(FFprobeSessionCompleteCallback)ffprobeSessionCompleteCallback; /** *

Returns the global FFprobeSessionCompleteCallback set. * * @return global FFprobeSessionCompleteCallback or nil if it is not set */ + (FFprobeSessionCompleteCallback)getFFprobeSessionCompleteCallback; /** *

Sets a global MediaInformationSessionCompleteCallback to receive execution results for MediaInformation sessions. * * @param mediaInformationSessionCompleteCallback complete callback or nil to disable a previously defined * callback */ + (void)enableMediaInformationSessionCompleteCallback:(MediaInformationSessionCompleteCallback)mediaInformationSessionCompleteCallback; /** *

Returns the global MediaInformationSessionCompleteCallback set. * * @return global MediaInformationSessionCompleteCallback or nil if it is not set */ + (MediaInformationSessionCompleteCallback)getMediaInformationSessionCompleteCallback; /** * Returns the current log level. * * @return current log level */ + (int)getLogLevel; /** * Sets the log level. * * @param level new log level */ + (void)setLogLevel:(int)level; /** * Converts int log level to string. * * @param level value * @return string value */ + (NSString*)logLevelToString:(int)level; /** * Returns the session history size. * * @return session history size */ + (int)getSessionHistorySize; /** * Sets the session history size. * * @param sessionHistorySize session history size, should be smaller than 1000 */ + (void)setSessionHistorySize:(int)sessionHistorySize; /** * Returns the session specified with sessionId from the session history. * * @param sessionId session identifier * @return session specified with sessionId or nil if it is not found in the history */ + (id)getSession:(long)sessionId; /** * Returns the last session created from the session history. * * @return the last session created or nil if session history is empty */ + (id)getLastSession; /** * Returns the last session completed from the session history. * * @return the last session completed. If there are no completed sessions in the history this * method will return nil */ + (id)getLastCompletedSession; /** *

Returns all sessions in the session history. * * @return all sessions in the session history */ + (NSArray*)getSessions; /** *

Clears all, including ongoing, sessions in the session history. *

Note that callbacks cannot be triggered for deleted sessions. */ + (void)clearSessions; /** *

Returns all FFmpeg sessions in the session history. * * @return all FFmpeg sessions in the session history */ + (NSArray*)getFFmpegSessions; /** *

Returns all FFprobe sessions in the session history. * * @return all FFprobe sessions in the session history */ + (NSArray*)getFFprobeSessions; /** *

Returns all MediaInformation sessions in the session history. * * @return all MediaInformation sessions in the session history */ + (NSArray*)getMediaInformationSessions; /** *

Returns sessions that have the given state. * * @return sessions that have the given state from the session history */ + (NSArray*)getSessionsByState:(SessionState)state; /** * Returns the active log redirection strategy. * * @return log redirection strategy */ + (LogRedirectionStrategy)getLogRedirectionStrategy; /** *

Sets the log redirection strategy * * @param logRedirectionStrategy log redirection strategy */ + (void)setLogRedirectionStrategy:(LogRedirectionStrategy)logRedirectionStrategy; /** *

Returns the number of async messages that are not transmitted to the callbacks for * this session. * * @param sessionId id of the session * @return number of async messages that are not transmitted to the callbacks for this session */ + (int)messagesInTransmit:(long)sessionId; /** * Converts session state to string. * * @param state session state * @return string value */ + (NSString*)sessionStateToString:(SessionState)state; /** *

Parses the given command into arguments. Uses space character to split the arguments. * Supports single and double quote characters. * * @param command string command * @return array of arguments */ + (NSArray*)parseArguments:(NSString*)command; /** *

Concatenates arguments into a string adding a space character between two arguments. * * @param arguments arguments * @return concatenated string containing all arguments */ + (NSString*)argumentsToString:(NSArray*)arguments; @end #endif // FFMPEG_KIT_CONFIG_H