It turns out some default Privoxy options are adding/modifying the HTTP response in a way that the Youtube app cannot understand. I added the following to my user.action file:
{ fragile -deanimate-gifs }
.googlevideo.com
and the videos can now play. The "Final result" when using the Privoxy Show Info page is shown below:
Final results:
+change-x-forwarded-for {block}
+hide-from-header {block}
+session-cookies-only
+set-image-blocker {pattern}
-add-header
-block
-client-header-filter
-client-header-tagger
-content-type-overwrite
-crunch-client-header
-crunch-if-none-match
-crunch-incoming-cookies
-crunch-outgoing-cookies
-crunch-server-header
-deanimate-gifs
-downgrade-http-version
-fast-redirects
-filter
-force-text-mode
-forward-override
-handle-as-empty-document
-handle-as-image
-hide-accept-language
-hide-content-disposition
-hide-if-modified-since
-hide-referrer
-hide-user-agent
-limit-connect
-overwrite-last-modified
-prevent-compression
-redirect
-server-header-filter
-server-header-tagger
Some online searches show that some people have success with "Enable HTTP Byte-Range" requests, but I don't see a similar option.