This is just a suggested amendment to JasonB's answer. It wasn't clear to me that it deserves a separate answer, since it deals with side issues tangentially related to the OP's question.
It's easier to deal with the singularities if we scale the direction field by Sin[x]. Since only one streamline needs updating when the initial condition is changed, we aim for code that does only that. Applying Dynamic to a plot inside Show, e.g. Show[p1, Dynamic[p2]], does not work, so I extract the graphics from the stream plot, apply Dynamic and rewrap in Graphics. Try it with Graphics@Dynamic@First@ omitted and you'll see a tremendous slow-down; there is still a big difference even if the first StreamPlot is computed once and passed to Manipulate in a variable, because all the graphics are updated even though they don't change.
Manipulate[
Show[
StreamPlot[{Sin[x], -Cos[y]},
{x, -4, 4}, {y, -4, 4},
StreamColorFunction -> "Rainbow", StreamPoints -> Fine],
Graphics@Dynamic@First@
StreamPlot[{Sin[x], -Cos[y]},
{x, -4, 4}, {y, -4, 4},
StreamColorFunction -> Red, StreamPoints -> {{{p0, Red}}}]
],
{{p0, {1.5, 1}}, {-4, -4}, {4, 4}, Locator}]
