We are developing an application which requires H264 video codec support. We are using CEF3 as a base for our application.
So currently we are using chromium 47 (2526 80). So the recent requirement is to use the Cisco open H264 for the project.
I had been trying to implement it and facing some issues, can you please help to resolve or come out of the issue.
I am currently going with 2 approaches parallely, given the details below;
First approach:- Was to use the cisco openH264 API in my application;
In this I am downloaded the cisco binary into my application at run time and loading that library into the application.
Classes for encoder and decoder are written to use the API’s provided by cisco open H264.
class ExternalH264EncoderFactory : public cricket::WebRtcVideoEncoderFactory (encoderFactoryObj)
class ExternalH264DecoderFactory : public cricket::WebRtcVideoDecoderFactory (decoderFactoryObj)
I am creating the object of peer connection factory by calling webrtc::CreatePeerConnectionFactory() with below details;
webrtc::CreatePeerConnectionFactory(worker, signalling, audioDeviceModule, encoderFactoryObj, decoderFactoryObj);
The above API interface is given below; (third_party\libjingle\source\talk\app\webrtc\peerconnectioninterface.h)
CreatePeerConnectionFactory(rtc::Thread* worker_thread, rtc::Thread* signaling_thread, AudioDeviceModule* default_adm, cricket::WebRtcVideoEncoderFactory* encoder_factory, cricket::WebRtcVideoDecoderFactory* decoder_factory);
Added the H264 codec by calling VideoCodec() (third_party\libjingle\source\talk\media\webrtc\webrtcvideoencoderfactory.h)
I am able to do until this; now my job is to set the peerconnectionfactory object back into webRTC I got struck here;
When I searched the chromium where all this API is called CreatePeerConnectionFactory(), I did find it in following places;
E:\chromium47_2526_with_deviceBinding\chromium47_2526\chromium\src\third_party\webrtc\examples\peerconnection\client\conductor.cc
E:\chromium47_2526_with_deviceBinding\chromium47_2526\chromium\src\third_party\libjingle\source\talk\app\webrtc\test\peerconnectiontestwrapper.cc
E:\chromium47_2526_with_deviceBinding\chromium47_2526\chromium\src\third_party\libjingle\source\talk\app\webrtc\java\jni\peerconnection_jni.cc
E:\chromium47_2526_with_deviceBinding\chromium47_2526\chromium\src\third_party\libjingle\source\talk\app\webrtc\peerconnection_unittest.cc
E:\chromium47_2526_with_deviceBinding\chromium47_2526\chromium\src\third_party\libjingle\source\talk\app\webrtc\peerconnectioninterface_unittest.cc
E:\chromium47_2526_with_deviceBinding\chromium47_2526\chromium\src\third_party\libjingle\source\talk\app\webrtc\peerconnectionfactory_unittest.cc
E:\chromium47_2526_with_deviceBinding\chromium47_2526\chromium\src\remoting\host\cast_extension_session.cc
E:\chromium47_2526_with_deviceBinding\chromium47_2526\chromium\src\content\renderer\media\webrtc\peer_connection_dependency_factory.cc
Can you please let me know which is the proper place to set it or I am doing something wrong. Since I got struck here for long time I am also looking for the second approach.
Second Approach:- Using the chromium patch https://codereview.webrtc.org/1306813009
I initially tried some months back when the patches were not complete but was not successful to make H264 work. Since now the patch is completed I am thinking to use the same.
But as per the patch it uses the encoding of open H264 (compile time) and decoder of FFMpeg. So if I use the same in my application then we need to pay the license for the MPEGLA (encoding) and FFmpeg for using decoding feature. Which in my current project is not expected.
Can I use the encoding similar code and link the cisco provided binary at dynamic time to avoid the MPEGLA license.
Also when I was going through the link (https://bugs.chromium.org/p/chromium/issues/detail?id=500605) hbos commented that if we want to use the open H264 decode we can use the patch set 16. Is this possible as to use the decoder of open H264 instead of FFmpeg decoder?
And for both of them can I use the dynamic linking instead of static linking to avoid the MPEGLA license?
Waiting for your valuable feedback.
Regards,
Venkatesh
--
---
You received this message because you are subscribed to the Google Groups "discuss-webrtc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrt...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/discuss-webrtc/e4020019-4267-42a0-a95c-7b58a056c575%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Thanks Peter for the quick response,
I will try following your suggestion.
Initially before posting the query I did try to modify peer_connection_dependency_factory.cc and update the peerConnectionFactory object in
PeerConnectionDependencyFactory::InitializeSignalingThread. But was unable to link to the main library.
Also for second approach planning to use the chromium 51 as CEF is still in dev channel for 53. Forgot to mention it in the initial post.
Regards,
Venkatesh
To view this discussion on the web visit https://groups.google.com/d/msgid/discuss-webrtc/681ee4da-3479-489c-a0ee-6256c0a1d7fa%40googlegroups.com.