更新:
1:修复b站不能观看的问题,其实就是请求里面添加refer,但是因为是IP地址,所以我整了个配置文件,如果还不能看,就手动改一下配置文件。关闭软件重新打开就好了。@Thexxx,改好了,不过下载器你自己配置吧,找个支持http下载的可以配置refer的,我就不找了,嘿嘿。。。。
2:增加52pojie链接。
3:修改文件名称,原来的太随意了,修改为Dlna_media_player. 修改DLNA设备名称为Dlna_media_player。
4: 应要求给程序增加一个图标 @慕云轻,
5: 本来想做下载列表的,看了看 太难了,毕竟刚学习C#两天。。。我把下载程序改成配置文件配置,这样大家可以定制下载程序。
6:开启DLNA按钮也换了个图标。好看一点。嘿嘿。
配置文件解释,一般网站不需要除非访问时需要定制refer或者user agent。
配置文件简单解释:DlnaMediaplayer.exe.config ,打开是xml文件,文本编辑器编辑。
可以定制refer和user_agent 格式区分大小写:refer的value需要有红色字样。 agent不需要。
主要代码逻辑如下:
1:在PC端开启该软件,伪装成Media Renderer,往239.255.255.250发ddsp包,注册成为AVTransport。
2:在手机端启动xxx客户端,反正不局限于某客户端,只要支持TV投影即可。 点击投影按钮,进行DLNA查询。
3:发现AVTransport设备,手机端作为controller发协议查询设备能力,并且在SetAVTransportURI 命令中,发送m3u8信息。 也就是说其实不管在网页端如何加密,最后这里都会发送一个可用的m3u8的地址过来。
4:该软件得到m3u8信息后,请用户选择是播放还是下载。
5:播放采用的是ffmpeg解码器进行解码播放。
其实总体思路并不难,这里记录一下遇到的坑:
1:为了保证Upnp的兼容性,基本上市面上的开源库都找了一遍,python的,java的,C++的,最后选用的是Platinum的开源库,接口比较丰富,而且兼容性较好,实际测试基本上开启后马上就可以被手机端识别到设备。
2:FFMpeg的集成,遇到很多很多兼容性的问题,.net framework 和.net core的冲突,sdl效率问题等等,真是郁闷至极,最后没办法,现学的C#,用的是Unosquare.FFME,这个库的好处是定制灵活,对外暴露的接口较多,集成方便,后续可以扩展。