[Live-devel] TS thrashing

Umar Qureshey umar at janteq.com
Tue Mar 4 12:36:43 PST 2014


Hello,

I have modified the testH264VideoToTransportStream.cpp program by simply replacing inputFileName to "stdin" and outputFileName to "/dev/my_device".

/dev/my_device is a Linux device driver that transports the TS data to the streaming hardware.

Then I run the following command line:

./openRTSP -v rtsp://192.168.1.214/stream/profile1=u | ./testH264VideoToTransportStreamToMicrowave

This works well except there is a lot of "thrashing".  Even with constant bitrate set in the encoder, the bitrate varies a lot.  At first I suspected that this may be happening because of the Linux pipe so I recompiled the kernel and increased to pipe size to 1 MB.  This did not help. 
So to verify if this is a Linux pipe issue I modified testH264VideoToTransportStream.cpp to output to UDP:

./openRTSP -v rtsp://192.168.1.214/stream/profile1=u | ./testH264VideoToTransportStreamToUDP

The above command line showed a very constant bitrate on the receiver side so I can deduce it's not a Linux pipe issue.

Finally, I put some debug prints in the Linux device driver and it shows that each fwrite call by the FileSink object is 188 bytes.  

I have already changed the bufferSize of FileSink to 1000000 for testing but that doesn't seem to help; it's still writing only 188 bytes per fwrite call:
MediaSink* outputSink = FileSink::createNew(*env, outputFileName, 1000000);


So is there a way to have more buffering going on so at each fwrite call writes more than 188 bytes at a time to /dev/my_device  ??

Thanks.



More information about the live-devel mailing list