Используйте фильтры zmq и azmq . В отличие от фильтра sendcmd, который использует предварительно записанные команды, (a) zmq позволяет произвольно отправлять команды фильтра.
Чтобы включить эти фильтры, необходимо установить библиотеку libzmq и заголовки и настроить ffmpeg
с помощью --enable-libzmq
.
Только фильтры, которые поддерживают команды, могут использоваться с этим фильтром. Обратитесь к выводу ffmpeg -filters
, чтобы просмотреть список фильтров, которые поддерживают команды. Кроме того, не все параметры фильтра считаются командами. Обратитесь к документации каждого фильтра для получения списка поддерживаемых команд.
Рассмотрим следующий фильтр-график, сгенерированный ffplay. В этом примере последний фильтр наложения имеет имя экземпляра. Все остальные фильтры будут иметь имена экземпляров по умолчанию.
ffplay -dumpgraph 1 -f lavfi "
color=s=100x100:c=red [l];
color=s=100x100:c=blue [r];
nullsrc=s=200x100, zmq [bg];
[bg][l] overlay [bg+l];
[bg+l][r] overlay@my=x=100 "
Чтобы изменить цвет левой стороны видео, можно использовать следующую команду:
echo Parsed_color_0 c yellow | tools/zmqsend
Чтобы изменить правую сторону:
echo Parsed_color_1 c pink | tools/zmqsend
На изменить положение правой стороны:
echo overlay@my x 150 | tools/zmqsend
Грязное отслеживание является нормальным способом обработать это, я думаю. Что-то как:
class MyObject {
public string SomeValue {
get { return _someValue; }
set {
if (value != SomeValue) {
IsDirty = true;
_someValue = value;
}
}
public bool IsDirty {
get;
private set;
}
void SaveToDatabase() {
base.SaveToDatabase();
IsDirty = false;
}
}
myoldObject = new MyObject { someValue = "old value" };
cache.Insert("myObjectKey", myoldObject);
myNewObject = cache.Get("myObjectKey");
myNewObject.someValue = "new value";
if(myNewObject.IsDirty)
myNewObject.SaveToDatabase();
Я сделал подобные вещи, но я обошел его путем клонирования также. Различие - то, что у меня был кэш, делают клонирование. При помещении объекта в кэш кэш клонирует объект сначала и сохранит клонированную версию (таким образом, можно видоизменить исходный объект, не отравляя кэш). Когда Вы получаете объект от кэша, кэш возвращает клон объекта вместо хранившего объекта (снова так, чтобы вызывающая сторона могла видоизменить объект, не производя кэшируемый/канонический объект).
я думаю, что это совершенно приемлемо пока данные, которые Вы храните/обманываете, является маленьким.