#include "content/public/renderer/render_frame.h"
#include "media/base/media_url_demuxer.h"
#include "third_party/blink/public/web/web_local_frame.h"
+#include "tizen_src/chromium_impl/tizen/tizen_tv_platform.h"
#include "tizen_src/ewk/efl_integration/common/application_type.h"
#endif
return false;
}
+#if defined(TIZEN_MULTIMEDIA) && BUILDFLAG(IS_TIZEN_TV)
+bool ContentRendererClient::DemuxerUrlNeeded(
+ const GURL& url,
+ const std::string content_mime_type) {
+ // Application_type.cc is not built with "build_chrome" flag
+#if !defined(BUILD_CHROME)
+ if (content::IsHbbTV() ||
+ ((GetProductType() == "LFD") && content::IsTIZENWRT()))
+ return true;
+#endif
+
+ /* some dash file don't set mime_type, need check file type */
+ if (url.spec().find(".mpd") != std::string::npos)
+ return true;
+
+ if (content_mime_type.empty())
+ return false;
+
+ const static std::set<std::string> demuxer_needed_mime_type{
+ "application/dash+xml", "application/vnd.apple.mpegurl",
+ "application/x-mpegURL", "application/x-mpegurl",
+ "application/mpegurl", "audio/mpegurl",
+ "audio/x-mpegurl"};
+ return demuxer_needed_mime_type.find(content_mime_type) !=
+ demuxer_needed_mime_type.end();
+}
+#endif
+
std::unique_ptr<media::Demuxer> ContentRendererClient::OverrideDemuxerForUrl(
RenderFrame* render_frame,
const GURL& url,
+#if BUILDFLAG(IS_TIZEN_TV)
+ const std::string content_mime_type,
+#endif
scoped_refptr<base::SequencedTaskRunner> task_runner) {
#if defined(TIZEN_MULTIMEDIA) && BUILDFLAG(IS_TIZEN_TV)
- if (blink::IsHbbTV()) {
+ bool is_demuxer_url_needed = DemuxerUrlNeeded(url, content_mime_type);
+ LOG(INFO) << "is_demuxer_url_needed : " << is_demuxer_url_needed
+ << ", content_mime_type: " << content_mime_type
+ << ", url: " << url.spec();
+ if (is_demuxer_url_needed) {
blink::WebLocalFrame* frame = render_frame->GetWebFrame();
return std::make_unique<media::MediaUrlDemuxer>(
task_runner, url, frame->GetDocument().SiteForCookies(),
virtual std::unique_ptr<media::Demuxer> OverrideDemuxerForUrl(
RenderFrame* render_frame,
const GURL& url,
+#if BUILDFLAG(IS_TIZEN_TV)
+ const std::string content_mime_type,
+#endif
scoped_refptr<base::SequencedTaskRunner> task_runner);
+#if defined(TIZEN_MULTIMEDIA) && BUILDFLAG(IS_TIZEN_TV)
+ // HLS/DASH stream not supported by ffmpeg, so need change to Tizen TV
+ // capi-player.
+ virtual bool DemuxerUrlNeeded(const GURL& url,
+ const std::string content_mime_type);
+#endif
+
// Allows the embedder to provide a WebSocketHandshakeThrottleProvider. If it
// returns NULL then none will be used.
virtual std::unique_ptr<blink::WebSocketHandshakeThrottleProvider>
video_frame_compositor_task_runner, std::move(submitter));
std::unique_ptr<media::Demuxer> demuxer_override =
- GetContentClient()->renderer()->OverrideDemuxerForUrl(render_frame_, url,
- media_task_runner);
+ GetContentClient()->renderer()->OverrideDemuxerForUrl(
+ render_frame_, url,
+#if BUILDFLAG(IS_TIZEN_TV)
+ source.ContentMineType().Utf8(),
+#endif
+ media_task_runner);
#if BUILDFLAG(ENABLE_CAST_RECEIVER)
if (!demuxer_override && cast_streaming_resource_provider_) {
bool IsMediaStream() const;
WebMediaStream GetAsMediaStream() const;
+#if BUILDFLAG(IS_TIZEN_TV)
+ const WebString& ContentMineType() const { return content_mime_type_; }
+ void SetContentMineType(const WebString& content_mime_type) {
+ content_mime_type_ = content_mime_type;
+ }
+#endif
+
private:
WebURL url_;
WebMediaStream media_stream_;
+#if BUILDFLAG(IS_TIZEN_TV)
+ WebString content_mime_type_;
+#endif
};
} // namespace blink
return chipset;
}
+inline std::string GetProductType() {
+ const char key_producttype[] =
+ "com.samsung/featureconf/product_type_for_model_binding";
+ std::string product_type;
+ char* str = nullptr;
+ int ret = system_info_get_custom_string(key_producttype, &str);
+ if (ret != SYSTEM_INFO_ERROR_NONE) {
+ LOG(WARNING) << "Failed to get system info : " << key_producttype;
+ } else if (str) {
+ product_type = str;
+ free(str);
+ }
+ return product_type;
+}
+
inline ResourceTableIndex GetResourceTableIndex() {
const char rm_tbl_id_path[] = "/proc/device-tree/resource-manager/rm_tbl_idx";
int rm_idx = -1; // negative values are not used in RM table index