Related question: when using Block Cipher Mode, how does Alice and Bob exchange the IV?
Someone please correct me if I'm wrong.
[1] https://github.com/signalapp/libsignal-protocol-java/blob/ma...
[2] https://signal.org/docs/specifications/doubleratchet/Set0_1....
That said, depending on the construction you use, nonrandom IVs can be a problem (they can leak that there's a relationship between different plaintexts if they line up with a difference in the first block), so you're better off at least making it a random function of the key and said blob/etc ID.