YYT直播项目技术记录
- 如何做好全屏交互体验
- VideoView内存泄漏
- VideoView播放RTMP和HLS(m3u8)格式
- VideoView播放加密HLS(m3u8)格式
- VideoView播放离线HLS(m3u8)格式
- VideoView通过LocalServer播放本地离线HLS(m3u8)格式
- 每个视频都有自己的m3u8解密Key
- 视频安全防护
- 视频安全更改LocalServer的HostName为127.0.0.1
- 视频安全-解密操作封装到SO(JNI)层
- 视频安全-在SO内部对签名进行校验
- 视频安全更改JavaLocalServer(NanoHTTPD)改为NativeLocalServer(mongoose)
在更改为NativeLocalServer时,由于在编译NDK时使用的时’std=C99’标准和mongoose自身的一些问题,导致了4.0-4.4的手机出现兼容问题,无法运行。
解决过程中所查文章:
- http://www.zhihu.com/question/20845153
- http://www.open-open.com/solution/view/1319209398468
- http://stackoverflow.com/questions/26104489/java-lang-unsatisfiedlinkerror-native-method-not-found
- http://seshadripera.blogspot.com/2013/04/javalangunsatisfiedlinkerror-native.html
- http://tools.android.com/tech-docs/new-build-system/gradle-experimental
- 等等,最后完美解决
- 在解决NativeLocalServer的4X兼容问题后发现5.1.1等手机出现’UnsatisfiedLinkError …file dex’的问题,最后发现是由于
classpath 'com.android.tools.build:gradle-experimental:0.7.0-rc1'
这个插件所引起的,在0.7版编译后无法生成64位的so文件,所以使用Eclipse编译就可以了。 再对视频流进行深度加密是使用到了whitecryption两个产品SCP和SKB。其中在Android JNI中碰到一些神坑。
关于whitecryption两个产品SCP和SKB的使用版本,请访问:https://support.whitecryption.com/register, 需要进行注册(最好使用贵司的邮箱)。
相关文档可请访问: http://www.whitecryption.com/overview/, 白皮书之类的可能需要注册被approve之后才可以下载。注册提交之后,我的同事会在后台审核,然后我会请他们尽快批准你们的账号。 再之后,您就可以申请SCP和SKB的使用SDK了,届时,需要您来选择具体的算法和平台。
有问题随时沟通。 另外:http://www.whitecryption.com/press-release-entry/2014/12/16/whitecryptions-secure-key-box-awarded-us-and-canadian-governments-federal-information-processing-standards-fips-security-certification, 是whitecryption通过FIPS level 2 的一个新闻稿。
- 当然上面的是文档和网站,涉及到重要的解密流程就不贴出来了,其中最重要的坑就是 unsigned char [] 的sizeof()结果是其数据内容大小,我这里是16字节。
点播使用LocalServer和直播使用LocalServer是两个不同的概念,其中要处理许多细节。其中一个问题就是在直播情况下:我们需要手动的实时更新LocalServer里面的内容,因为直播流内的m3u8文件,一般来说只有几个切片。
在处理直播情况下的更新MU38内容时,碰到了更新不及时,导致VideoView播放MU38时获取不到新TS切片,然后认为视频直播结束,然后走到
OnCompletionListener
中的情况。轮询更新M3U8文件到LocaServer中的请求间隔一般为TARGETDURATION的一半。