So... I have a Vizio TV. I'm trying to write an app with the yahoo connected TV platform. Well, really just a proof of concept at this point, to see if it is worth building an app. In short, my question is this:
The TV supports MP4/h.264/AAC. I can direct stream video of that type just fine and seek forward and back in the video.
I can use the generic transcoder (not the legacy transcoder) and get the video to play on my TV. I can seek forward and backward fine. The transcoder command looks like this:
I've set up a profile for my app. Using the container of mpegts doesn't work. MP4 chokes with an error about creating a seekable container. But using "pms" like the generic transcoder uses seems to give me the closest result except that the video player chokes on a line of code that is trying to identify the audio/video 'type' so it knows how to decode it. (The errors in the simulator are very vague). If I tell it not to direct stream the video (DirectStream=0), it transcodes the video instead of copy, but it still won't play.
But I know the generic transcoder works, so how can I get the universal transcoder to give me the same output?
So you might be asking why I don't just use the generic transcoder. The big reason is that the universal transcoder is smart enough to NOT transcode if it doesn't have to. It will only transcode audio if the video format is supported. h.264 is used on most everything nowadays. But AAC is not. Usually it is DTS or AC3. It is really nice for underpowered servers (like mine) or NASs to only have to transcode audio. If there is a way to do the same thing with the generic transcoder, that would work, too. I have tried to set the videoCodec to 'copy', but it still uses libx264.
Most of the different things I have tried will stream to vlc or my browser (or it's various plugins). So the transcoder is working and producing useable video. But my TV and the simulator don't seem to like it.
I have tried HLS/m3u8 and the video player has no clue what to do with that. Even tried manually pulling out the TS files and handing them to the player and it still can't decode. I tried briefly to use the dash protocol and hand off the segments from that again to no avail.
I just can't figure out how to make the universal transcoder give me the same output as the generic. Any thoughts? I've been searching for a week through very sparse documentation trying to find some sort of solution and I am stuck.
So, after some back and forth with others and some research.. You cannot live transcode MP4 files in the manner that you are invoking it. It creates a franken-file that doesn't work. Apparently the problem is with the file headers (MOOV Atom) can't be compiled until the transcoding is completed. This is why Plex liberally uses MPEG-TS when it transcodes, as this format is better suited for transcode & transport over HLS.
Regarding the Generic Transcoder, the response was that black magic was involved & turned out not to be a viable solution for the New Transcoder.
It seems like you may be out of luck in the transcoding part with the New Transcoder. However Native MP4 files should play just fine, provided the encoding profile fits your device.
Thanks for the response. I was afraid that you would say something like that. What you say makes sense. I suspect that maybe I could get it to work on small files that could be entirely buffered on the client, because then it could see the MOOV bits. But that isn't helpful.
I guess I can stick with the generic transcoder. That seems to work reasonably well, assuming the server can keep up with the transcoding and the network can keep up with the data. The wireless connection on the Vizio TVs seems to be a little lacking, but with hard-wired ethernet I'm able to stream at full quality 720 (which is as fast as they say the ethernet connection on the device can handle). I still am not sure I'm getting the full performance out of it, but maybe I am, too. Netflix seems to be able to stream just fine to my devices, but maybe it is not really giving me great quality either. I'll have to do some more testing of that.
So, do you know if there is any way to make the generic transcoder remux the video stream and only transcode the audio stream? Even if I have to make that decision on the client and then tell the server what to do, instead of having the transcoder be smart enough to handle it.
One thing I was able to do in my screwing around... I can use the unversal transcoder to give me the m3u8 index file, then I can dig out the individual TS files and send them through the generic transcoder to make tiny bits that the client can understand. I haven't yet tested enough to know if the media player can stream them together seamlessly. The little bit of testing I did seemed like it might drop to black as it switched to the next file in the playlist. BUT, I'm not sure going that route can really buy me anything as the generic transcoder still fully transcodes the video. Ideally I like to be able to remux the video and only transcode audio where the media is in the right format, making this a much better option for low powered servers and NASs.
Do you know any other secrets about the generic transcoder? Or any resource for it? Digging through the internet, I have found several parameters, but I wonder if I am missing anything useful. I finally found a Quality setting that seems to be a key. The videoBitrate doesn't seem to do anything on the generic transcoder and the Quality seems to be the correct knob to turn. Documentation seems very sparse. Wish I could find some more. Even just a dirty list of the available options with no clue as to what they do, then at least I could do some playing.
So, i've been trying to get this to work with the generic transcoder just using a web browser (for now). But, every time I execute the command via an HTTP GET to the generic transcoder, all of Plex freezes (on windows). I also tried it on OS X (and it terminates the entire Plex process). In the mean time my browser just says "Waiting for reply"
Using the log files, I see that my command causes Plex to execute the exact same Plex Transcoder command you have listed above with the same parameters. Further, when I execute that Plex Transcoder command with all of its paramaters in a console, it works, and starts dumping data to the console.
As an aside, if I change the container to mpegts, everything works great, and the browser starts to download the file.
I replied to your PM. Not sure it will help much. I've pretty much abandoned the generic transcoder. For the first run of my app, it will be Direct Play only. Then maybe I'll look into other transcoding options. Fortunately, it looks like many of the newer Vizio TVs (that I'm developing for) support most formats. My older one only seems to like MP4 and WMV.