[WFD]播放DRM视频时,SINK端显示全黑画面或者默认图片

[DESCRIPTION]

假设WFD SINK为TV ,和手机通过WFD连接上后,TV画面显示正常。
但是打开第三方视频播放软件(如iFlix)播放视频,或者播放本地DRM视频时,TV端画面显示全黑或者是一张默认图片(如下图)。

4.27tp-26.png (63.29 KB, 下载次数: 0 )

下载附件  保存到相册

2016-4-27 16:51 上传

[SOLUTION]

此现象为正常现象,通常是WFD SOURCE或者WFD SINK不支持HDCP导致。
代码实现逻辑如下:
1.SOURCE和SINK沟通协商是否支持HDCP,是否需要建立hdcp连接,并将最终将协商结果反应在
mUsingHDCP上。
若SOURCE没有打开宏MTK_DX_HDCP_SUPPORT,不支持HDCP,则在M3阶段不会发送
“wfd_content_protection”参数;
若SINK端不支持HDCP,则在M3 Response里不会回复“wfd_content_protectio”对应value为
“none”.
frameworks\av\media\libstagefright\WIFIdisplay\
source\WifiDisplaySource.cpp
status_t WifiDisplaySource::sendM3(int32_t sessionID) {
...
AString body =
#if defined(MTK_DX_HDCP_SUPPORT) || defined(WFD_HDCP_TX_SUPPORT)
"wfd_content_protection\r\n"
#endif
"wfd_video_formats\r\n"
"wfd_audio_codecs\r\n"
"wfd_client_rtp_ports\r\n";
...
}
status_t WifiDisplaySource:nReceiveM3Response(
...
mUsingHDCP = false;
if (!params->findParameter("wfd_content_protection", &value)) {
ALOGI("Sink doesn't appear to support content protection.");
} else if (value == "none") {
ALOGI("Sink does not support content protection.");
} else {
#if HDCP_ENABLE_CONTROL
char v[PROPERTY_VALUE_MAX];
if (property_get("media.stagefright_wfd.hdcp.off", v, NULL)
&& (!strcmp(v, "1") ))
{
ALOGD("turn off HDCP !");
}
else
#endif
{
mUsingHDCP = true;
...
}
2.WifiDisplaySource将通过mUsingHDCP,决定是否设置secure标志给WifiDisplayAdapter-
>WifiDisplayDevice.
frameworks\av\media\libstagefright\wifidisplay\
source\WifiDisplaySource.cpp
void WifiDisplaySource:nMessageReceived(const sp &msg) {
...
case kWhatPlaybackSessionNotify:
{
...
if (mClient != NULL) {
ALOGD("laybackSession::kWhatSessionEstablished HDCP = %d\n", mUsingHDCP);
if (!mSinkSupportsVideo) {
mClient->onDisplayConnected(
NULL, // SurfaceTexture
0, // width,
0, // height,
mUsingHDCP
? IRemoteDisplayClient::kDisplayFlagSecure
: 0,
0);
} else {
size_t width, height;
CHECK(VideoFormats::GetConfiguration(
mChosenVideoResolutionType,
mChosenVideoResolutionIndex,
&width,
&height,
NULL /* framesPerSecond */,
NULL /* interlaced */));
mClient->onDisplayConnected(
mClientInfo.mPlaybackSession
->getSurfaceTexture(),
width,
height,
mUsingHDCP
? IRemoteDisplayClient::kDisplayFlagSecure
: 0,
playbackSessionID);
}
}
...
}
3.在surface ondraw的过程中,若播放secure内容时,通过hw->isSecure()来确认是否是有建立
hdcp安全通道,选择是显示默认图片还是直接显示视频画面。
frameworks\native\services\surfaceflinger\Layer.cpp
void Layer:nDraw(const sp& hw, const Region& clip,
bool useIdentityTransform) const
{
...
//若app有对播放内容做保护isSeCure()=true;若没有建立HDCP连接,则hw-
>isSecure()=false,所以最终blackOutLayer为true。
bool blackOutLayer = isProtected() || (isSecure() && !hw->isSecure());
if (!blackOutLayer) {
...
} else {
#ifdef MTK_AOSP_ENHANCEMENT
char value[PROPERTY_VALUE_MAX];
property_get("debug.sf.no_security_img", value, "0");
if ((atoi(value) == 0) && (false == hw->isSecure()))
engine.setupLayerProtectImage();
else
#endif
engine.setupLayerBlackedOut();
}
...
}
所以该问题请先确认WFD SOURCE和SINK是否支持HDCP,若有一方不支持,该问题即为正常现象。

[WFD]播放DRM视频时,SINK端显示全黑画面或者默认图片相关推荐

  1. 手机影音第十一天,显示视频缓冲,显示卡顿时的网速,播放系统视频时调用播放器的选择...

    代码已经托管到码云,有兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer 一.设置视频缓冲进度 显示视频播放进度的效果图如下:灰色的是 ...

  2. VUE:img标签加载图片失败时,显示一张自定义默认图片

    简介 在使用<img />标签时,会遇到图片加载失败(有图片资源路径,但是可能路径拼接不正确.域名失效等)的情况,此时,显示出来的效果看着就很不舒服,就想显示一张默认图片. img加载失败 ...

  3. flv.js直播点播,播放flv视频时快进、重连、卡死、延迟等问题

    flv视频流延迟 在普通的网络环境下,flv.js播放http-flv的视频流延迟大概在3~5秒左右,对于实时性要求比较高的场景,显然是不适用的,那么怎么才能降低延迟呢? 通过对buffered(缓冲 ...

  4. Android 播放视频时横竖屏的调整

    我个人看视频的时候喜欢横屏看,这样视频图像显得还大,所以在做自己的播放器的时候默认就是横屏显示.这样在播放横屏录制的视频时没有问题,但是一旦播放竖屏录制的视频问题就大了,图像都是偏转90度的.这可怎么 ...

  5. Chrome播放视频时只有声音没有画面

    问题 win7下Chrome在线播放视频时只有声音,没有画面 解决 打开Chrome,点击右上角菜单,选择设置 -> 高级 -> 系统,取消使用硬件加速模式(如果可用): 重启Chrome ...

  6. 开源播放器 ijkplayer (一) :使用Ijkplayer播放直播视频

    1.ijkplayer 编码 IjkPlayer支持硬解码和软解码. 软解码时不会旋转视频角度这时需要你通过onInfo的what == IMediaPlayer.MEDIA_INFO_VIDEO_R ...

  7. Android视频开发进阶(part5-安卓的DRM,视频版权保护)

    之前因为种种原因好久没有更新视频开发的文章了.今天刚刚从国内飞回来,趁着周末更新一下.不过关于DRM这块首先一般的开发者很少用到,而且DRM的开发需要前后台的密切合作,可以说后台的工作占了一大半,安卓 ...

  8. 视频融合云平台EasyCVR按时间调用MP4视频时长不正确,如何解决?

    EasyCVR视频融合云服务平台支持国标GB/T28181.海康SDK.大华SDK.ONVIF.RTSP协议.Ehome协议等,可实现安防视频流的快速采集.转流上云能力. 通过平台级联.二次开发等方式 ...

  9. html视频标签不显示,HTML视频标签无法正确显示视频

    这里是我的JS: function video() { navigator.device.capture.captureVideo(onSuccess, onFail, { limit: 1, dur ...

最新文章

  1. Hopfiled 神经网络实例解释
  2. Android 笔记一
  3. mysqli_connect_error 乱码解决
  4. java进阶 2018_Java Web基础入门2018版
  5. 办公:Office快捷键之王,这个键应该没人不服!
  6. 数据库事务及事务的特征
  7. 安装MongoDB Install MongoDB on Ubuntu
  8. 深度学习模型提升模型效果的常见方法
  9. DefaultKeyedVector和KeyedVector用法
  10. CentOS7网络快速解决
  11. C# 图书管理系统(MySQL)——代码(四)
  12. 《Head First设计模式》第二版中译本内文彩页欣赏
  13. 安全电子签章密码技术规范_「签签课堂」(四)一篇读懂电子合同的专业术语...
  14. 目标跟踪入门:使用OpenCV实现质心跟踪
  15. ybc_xxx类模块应用1-ybc_speech(第一片)
  16. dropbox 下载不了问题
  17. xdocreport根据模板生成合同(docx/pdf)神器:(三)如何制作报告模板并根据它生成docx或者ppt
  18. 华中科技大学和华为云瑶光造就中国团队全球首冠
  19. 2021-01-22 Science对于“Misused images”图片误用的报道
  20. 使用python将罗马字转换为对应的阿拉伯数字

热门文章

  1. spring security如果未登录,返回JSON数据
  2. 利用python实时获取公网IP地址
  3. 基于C++的新冠疫苗信息管理系统设计与实现
  4. 亚马逊跟卖有效找listing,适合各阶段卖家
  5. 实时监控安徽省各个市的公共资源交易平台
  6. WIN10 超好用的快捷键
  7. C++中各种数据成员及成员函数的定义及使用
  8. 【题解】LuoGu5687:[CSP-SJX2019]网格图
  9. geopandas面积计算及投影
  10. Linux下IIC驱动编写,介绍IIC子系统框架的使用