文章目录
  • 1. Intro
  • Intro

    由于项目需要,我开始研究在线音视频播放器。


    过去我组用的音频播放方案是:MediaPlayer + 自定义View + Service,通过广播切换播放状态
    视频播放方案是:MediaPlayer + SurfaceView + VideoControllerView
    然而不久,就发现了性能上的问题。网络音频/视频加载缓慢,加载一个5M左右音频,平均用户等待时间为5s。但通过浏览器访问该资源文件时,却可以马上播放。例如:http://audio.vsaker.com/T2/org/T2-90.mp3
    我也查了不少资料,下了不少开源项目参考,但大部分是介绍本地播放器的,很少有写在线播放器相关。
    同时我也从网上下载了不少同类型产品的app作比较,例如喜马拉雅、多听、qq音乐、网易云音乐,这些都做的很好,本想反编译以后学习一下,但难以理解。


    android5.0提供了android.service.media,其中包括MediaBrowserService

    Media browse services enable applications to browse media content provided by an application and ask the application to start playing it. They may also be used to control content that is already playing by way of a MediaSession.


    官方指出,配合MediaSession使用,风味更佳。




    关于token的知识:当客户端请求页面时,服务器会通过token标签生成一个随机数,并放置到session当中,然后将随机数发向客户端; 如果客户第一次提交,那么浏览器会将该随机数发往服务器,服务器端会接收到该随机数并且与session中所保存的随机数进行比较, 这时两者的值是相同的,服务器认为是第一次提交,并且将更新服务器端的这个随机数值;如果此时再次重复提交, 那么客户端向服务器端的随机数还是之前的那个,而服务器端的随机数则已经发生了变化,两者不同,服务器就认为这事重复提交, 进而转向invalid.token所指向的结果页面。



    看完这两张图,我瞬间感觉无比清晰。总的来说,就是MediaController为控制端,MediaSession为受控端。

    Fork me on GitHub