1. 程式人生 > >基於tkinter+python36製作得視訊播放器,非會員也可播放

基於tkinter+python36製作得視訊播放器,非會員也可播放

首先附上2個播放地址,可以解析視訊網站,我只是個視訊搬運工,暫時未新增下載功能。

www.wq114.org/weixin.php?url=

http://www.wmxz.wang/video.php?url=

兩個網站都可快速解析出視訊播放地址

上圖

tkinter模組程式碼如下

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

from tkinter.ttk import Button,Entry,Radiobutton,Scrollbar
from tkinter import END,Label,Tk,StringVar,Listbox,messagebox,SINGLE,PhotoImage
from 愛奇藝_project.movie_get import Pro
from PIL import Image,ImageTk
import io
import re
import requests
# from urllib.request import urlopen

class Movie_app:
    def __init__(self):
        self.win=Tk()
        self.win.geometry('600x420')
        self.win.title("愛奇藝-優酷-PPTV視訊播放下載器V3.1")
        self.creat_res()
        self.creat_radiores()
        self.config()
        self.page=1
        self.p=Pro()
        self.win.mainloop()


    def creat_res(self):
        self.temp=StringVar()#url地址
        self.temp2=StringVar()
        self.t1=StringVar()#通道
        self.t3=StringVar()#愛奇藝,優酷,PPTV
        self.La_title=Label(self.win,text="地址:")
        self.La_way=Label(self.win,text="選擇視訊通道:")
        self.R_way1=Radiobutton(self.win,text="通道A",variable=self.t1,value=True)
        self.R_way2=Radiobutton(self.win,text="通道B",variable=self.t1,value=False)
        self.R_aiqiyi=Radiobutton(self.win,text="愛奇藝",variable=self.t3,value="a")
        self.R_youku=Radiobutton(self.win,text="優酷",variable=self.t3,value="y")
        self.R_pptv=Radiobutton(self.win,text="PPTV",variable=self.t3,value="p")
        self.B_play=Button(self.win,text="播放▶")
        self.B_uppage=Button(self.win,text="上頁")
        self.B_nextpage=Button(self.win,text="下頁")
        self.B_search=Button(self.win,text="♣搜尋全站♠")
        self.La_mesasge=Label(self.win,text="☜  ⇠☸⇢  ☞",bg="pink")
        self.La_page=Label(self.win,bg="#BFEFFF")
        self.S_croll=Scrollbar(self.win)
        self.L_box=Listbox(self.win,bg="#BFEFFF",selectmode=SINGLE)
        self.E_address=Entry(self.win,textvariable=self.temp)
        self.La_title.place(x=10,y=50,width=50,height=30)
        self.E_address.place(x=70,y=50,width=200,height=30)
        self.B_play.place(x=300,y=50,width=50,height=30)
        self.R_way1.place(x=160,y=10,width=70,height=30)
        self.R_way2.place(x=240,y=10,width=70,height=30)
        self.La_way.place(x=10,y=10,width=100,height=30)
        self.R_aiqiyi.place(x=20,y=100,width=70,height=30)
        self.R_youku.place(x=90,y=100,width=70,height=30)
        self.R_pptv.place(x=160,y=100,width=70,height=30)
        self.B_search.place(x=252,y=140,width=100,height=30)
        self.La_mesasge.place(x=80,y=125,width=90,height=20)
        self.L_box.place(x=10,y=180,width=252,height=230)
        self.S_croll.place(x=260,y=180,width=20,height=230)
        self.B_uppage.place(x=10,y=140,width=50,height=30)
        self.B_nextpage.place(x=180,y=140,width=50,height=30)
        self.La_page.place(x=80,y=150,width=90,height=28)

    def creat_radiores(self):
        self.movie=StringVar()#電影
        self.S_croll2=Scrollbar()#分集
        self.La_pic=Label(self.win,bg="#E6E6FA")
        self.La_movie_message=Listbox(self.win,bg="#7EC0EE")
        self.R_movie=Radiobutton(self.win,text="電影",variable=self.movie,value="m")
        self.tv=Radiobutton(self.win,text="電視劇",variable=self.movie,value="t")
        self.zhongyi=Radiobutton(self.win,text="綜藝",variable=self.movie,value="z")
        self.dongman=Radiobutton(self.win,text="動漫",variable=self.movie,value="d")
        self.jilupian=Radiobutton(self.win,text="紀錄片",variable=self.movie,value="j")
        self.B_view=Button(self.win,text="✤檢視✤")
        self.B_info=Button(self.win,text="使用說明")
        self.B_clearbox=Button(self.win,text="清空列表")
        self.B_add=Button(self.win,text="新增到播放列表")
        self.R_movie.place(x=290,y=180,width=80,height=30)
        self.B_view.place(x=290,y=330,width=70,height=30)
        self.B_add.place(x=370,y=255,width=100,height=30)
        self.B_clearbox.place(x=500,y=255,width=70,height=30)
        self.tv.place(x=290,y=210,width=80,height=30)
        self.zhongyi.place(x=290,y=240,width=80,height=30)
        self.dongman.place(x=290,y=270,width=80,height=30)
        self.jilupian.place(x=290,y=300,width=80,height=30)
        self.La_movie_message.place(x=370,y=290,width=200,height=120)
        self.La_pic.place(x=370,y=10,width=200,height=240)
        self.B_info.place(x=290,y=370,width=70,height=30)
        self.S_croll2.place(x=568,y=290,width=20,height=120)

    def show_info(self):
        msg="""
        1.輸入視訊播放地址,即可播放
          選擇A或者B可切換視訊源
        2.選擇視訊網,選擇電視劇或者電影,
          搜尋全網後選擇想要看得影片,點
          檢視,在右方list裡選擇分集視訊
          新增到播放列表裡點選播放
        """
        messagebox.showinfo(title="使用說明",message=msg)

    def config(self):
        self.t1.set(True)
        self.B_play.config(command=self.play_url_movie)
        self.B_search.config(command=self.search_full_movie)
        self.B_info.config(command=self.show_info)
        self.S_croll.config(command=self.L_box.yview)
        self.L_box['yscrollcommand']=self.S_croll.set
        self.S_croll2.config(command=self.La_movie_message.yview)
        self.La_movie_message['yscrollcommand']=self.S_croll2.set
        self.B_view.config(command=self.view_movies)
        self.B_add.config(command=self.add_play_list)
        self.B_clearbox.config(command=self.clear_lisbox2)
        self.B_uppage.config(command=self.uppage_)
        self.B_nextpage.config(command=self.nextpage_)

    def uppage_(self):
        print('---------上一頁---------')
        self.page-=1
        print(self.page)
        if self.page<1:
            self.page=1

    def nextpage_(self):
        print('----------下一頁--------')
        self.page+=1
        print(self.page)
        if self.t3=="a" or self.t3=="y":
            if self.page>30:
                self.page=30
        elif self.t3=="p":
            if self.movie=="m":
                if self.page>165:
                    self.page=165
            elif self.movie == "t":
                if self.page > 85:
                    self.page = 85
            elif self.movie == "z":
                if self.page > 38:
                    self.page = 38
            elif self.movie == "d":
                if self.page > 146:
                    self.page = 146
            elif self.movie == "j":
                if self.page > 40:
                    self.page = 40

    def clear_lisbox(self):
        self.L_box.delete(0,END)

    def clear_lisbox2(self):
        self.La_movie_message.delete(0,END)

    def search_full_movie(self):
        print("-----search----")
        self.La_page.config(text="當前頁:{}".format(self.page))
        self.clear_lisbox()
        try:
            movie_url, movie_title, movie_src_pic=self.p.get_movie_res(self.t3.get(),self.movie.get(),self.page)
            self.movie_dic={}
            for i,j,k in zip(movie_title,movie_url,movie_src_pic):
                self.movie_dic[i]=[j,k]
            for title in movie_title:
                self.L_box.insert(END,title)
            print(self.movie_dic)
            return self.movie_dic
        except:
            messagebox.showerror(title='警告',message='請選擇電影或者電視劇')

    def add_play_list(self):
        print('---------playlist----------')
        print(self.movie_dic)
        if self.La_movie_message.get(self.La_movie_message.curselection())=="":
            messagebox.showwarning(title="警告",message='請在列表選擇影片')
        else:
            print("電影名字:",self.La_movie_message.get(self.La_movie_message.curselection()))
            if self.movie.get()!="m":
                self.temp.set(self.new_more_dic[self.La_movie_message.get(self.La_movie_message.curselection())])
            else:
                self.temp.set(self.movie_dic[self.La_movie_message.get(self.La_movie_message.curselection())][0])


    def view_pic(self,pic_url):
        print('--------viewpic---------')
        pa_url_check=r'//.+[.]jpg'
        if re.match(pa_url_check,pic_url):
            print("ok")
            pic_url="http:"+pic_url
        print(pic_url)
        data=requests.get(pic_url).content
        # data=urlopen(pic_url).read()
        io_data=io.BytesIO(data)
        self.img=Image.open(io_data)
        self.u=ImageTk.PhotoImage(self.img)
        self.La_pic.config(image=self.u)

    def view_movies(self):
        print("--------viewmovie----------")
        cur_index=self.L_box.curselection()
        print(self.L_box.get(cur_index))
        if self.movie.get()!="m":#非電影類
            self.new_more_dic=self.p.get_more_tv_urls(self.movie_dic[self.L_box.get(cur_index)][0],self.t3.get(),self.movie.get())
            print(self.new_more_dic)
            for i,fenji_url in self.new_more_dic.items():
                self.La_movie_message.insert(END, i)
        else:#電影類
            self.La_movie_message.insert(END,self.L_box.get(cur_index))
        self.view_pic(self.movie_dic[self.L_box.get(self.L_box.curselection())][1])#載入圖片

    def play_url_movie(self):
        print("--------ok-----------")
        # print(type(self.t1.get()),self.t1.get())
        if self.temp.get()=="":
            messagebox.showwarning(title="警告",message="請先輸入視訊地址")
        else:
            if self.t1.get()!="":
                self.p.play_movie(self.temp.get(),self.t1.get())
            else:
                messagebox.showwarning(title='警告',message='請選擇通道')


m=Movie_app()


視訊獲取程式碼如下

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

"""
VIP視訊解析:http://www.vipjiexi.com/
無名小站:http://www.wmxz.wang/
http://www.iqiyi.com/lib/dianying/%E5%96%9C%E5%89%A7,%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86,2018_11_1.html
"""

import requests
import re
import os
from lxml import etree
from  selenium import webdriver



class Pro:
    header_ai={'Referer': 'http://www.iqiyi.com/',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.17 Safari/537.36'

    }
    header_you={'Referer': 'http://list.youku.com/category/video','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
    header_pp = {'Referer': 'http://list.pptv.com/',
              'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
    way=False
    def __init__(self):
        pass

    def search_movies_type(self,u_name,u_type,page):#兩個引數 根據狀態輸出規則
        dic1 = {'m': 1, 't': 2, 'z': 6, 'd': 4, 'j': 3}
        dic2 = {'m': 96, 't': 97, 'z': 85, 'd': 100, 'j': 84}
        dic3 = {'m': 1, 't': 2, 'z': 4, 'd': 3, 'j': 210548}
        headers={}
        #愛奇藝 a/電影m:1 t:2 z:6 d:4 j:3  優酷y / m:96 t:97 z:85 d:100 j:84 pptv  p/m:1 t:2 z:4 d:3 j:210548
        url, pa_movie_title, pa_movie_url, pa_move_pic='','','',''
        url_aiqiyi='http://list.iqiyi.com/www/{}/-------------24-{}-1-iqiyi--.html'.format(dic1[u_type],page)
        url_youku='https://list.youku.com/category/show/c_{}_s_1_d_1_p_{}.html'.format(dic2[u_type],page)
        # url_pptv='http://list.pptv.com/category/type_{}.html'.format(dic3[u_type])
        url_pptv='http://list.pptv.com/channel_list.html?page={}&type={}'.format(page,dic3[u_type])
        pa_ai_movie_title = '//div[@class="site-piclist_pic"]/a[@class="site-piclist_pic_link"]/@title'
        pa_ai_movie_url = '//div[@class="site-piclist_pic"]/a[@class="site-piclist_pic_link"]/@href'
        pa_ai_movie_pic = '//div[@class="site-piclist_pic"]/a[@class="site-piclist_pic_link"]/img/@src'
        pa_you_movie_title='//div[@class="p-thumb"]/a/@title'
        pa_you_movie_url='//div[@class="p-thumb"]/a/@href'
        pa_you_movie_pic='//div[@class="p-thumb"]/img[@class="quic"]/@src'
        pa_pp_movie_title='//li/a[@class="ui-list-ct"]/@title'
        pa_pp_movie_url='//li/a[@class="ui-list-ct"]/@href'
        pa_pp_movie_pic='//li/a[@class="ui-list-ct"]/p[@class="ui-pic"]/img/@data-src2'
        if u_name=="a":#如果是愛奇藝
            url=url_aiqiyi
            pa_movie_title=pa_ai_movie_title
            pa_movie_url=pa_ai_movie_url
            pa_move_pic=pa_ai_movie_pic
            headers=self.header_ai
        elif u_name=="y":#如果是優酷
            url=url_youku
            pa_movie_title=pa_you_movie_title
            pa_movie_url=pa_you_movie_url
            pa_move_pic=pa_you_movie_pic
            headers=self.header_you

        elif u_name=="p":#如果是PPTV
            url=url_pptv
            pa_movie_title=pa_pp_movie_title
            pa_movie_url=pa_pp_movie_url
            pa_move_pic=pa_pp_movie_pic
            headers=self.header_pp

        return url,pa_movie_title,pa_movie_url,pa_move_pic,headers


    def get_movie_res(self,u_name,u_type,page):#輸出電影名 連結 圖片
        url, pa_movie_title, pa_movie_url, pa_move_pic,headers=self.search_movies_type(u_name,u_type,page)
        res=requests.get(url=url,headers=headers).content.decode('utf-8')
        # print(res)
        html=etree.HTML(res)
        movie_url=html.xpath(pa_movie_url)
        movie_title=html.xpath(pa_movie_title)
        movie_src_pic=html.xpath(pa_move_pic)
        print(len(movie_title),movie_title)
        print(len(movie_url),movie_url)
        print(len(movie_src_pic),movie_src_pic)
        return movie_url,movie_title,movie_src_pic

    def change_urlink(self,lis):
        for i in range(len(lis)):
            if '\\' in lis[i]:
                lis[i] = lis[i].replace('\\', '')
        # print(lis)
        return lis

    def change_youku_link(self,urls):
        pa_link='//.+[.]html'
        if re.match(pa_link,urls):
            urls='http:'+urls
        return urls

    def get_more_tv_urls(self,url,u_name,u_type):#獲取電視劇分集連結
        tv_dic_new = {}
        if u_name == 'y':
            url=self.change_youku_link(url)
            res = requests.get(url, headers=self.header_you).text.encode(encoding='utf-8').decode('utf-8')
            html = etree.HTML(res)
            print(res)
            if u_type=="m" or u_type=="t":
                self.tv_more_title = html.xpath('//div[@class="item item-num"]/@title')
                self.tv_more_url = html.xpath('//div[@class="item item-num"]/a[@class="sn"]/@href')
            elif u_type=="d":
                self.tv_more_title = html.xpath('//div[@class="item item-txt"]/@title')
                self.tv_more_url = html.xpath('//div[@class="item item-txt"]/a[@class="sn"]/@href')
            elif u_type=="z":
                self.tv_more_title = html.xpath('//div[@class="item item-cover"]/@title')
                self.tv_more_url = html.xpath('//div[@class="item item-cover"]/a/@href')
            elif u_type == "j":
                self.tv_more_title = html.xpath('//div[@class="item item-cover current"]/@title')
                self.tv_more_url = html.xpath('//div[@class="item item-cover current"]/a/@href')
        elif u_name == 'a':
            res = requests.get(url, headers=self.header_ai).text.encode(encoding='utf-8').decode('utf-8')
            html = etree.HTML(res)
            print(res)
            if u_type=="m" or u_type=="t" or u_type=='d':
                self.tv_more_title = html.xpath(
                    '//ul/li[@data-albumlist-elem="playItem"]/div[@class="site-piclist_pic"]/a[1]/@title')
                self.tv_more_url = html.xpath(
                    '//ul/li[@data-albumlist-elem="playItem"]/div[@class="site-piclist_pic"]/a[1]/@href')
            elif u_type=="z" or u_type=="j":
                self.tv_more_title = html.xpath('//div[@class="recoAlbumTit"]/a[1]/@title')
                self.tv_more_url = html.xpath('//div[@class="recoAlbumTit"]/a[1]/@href')
        elif u_name == 'p':
            res = requests.get(url, headers=self.header_pp).text.encode(encoding='utf-8').decode('utf-8')
            # html = etree.HTML(res)
            self.tv_more_url2 = re.compile('{"url":"(.+?)"').findall(res)
            self.tv_more_url = self.change_urlink(self.tv_more_url2)
            self.tv_more_title = ["第{}集".format(x) for x in range(1, len(self.tv_more_url) + 1)]
        for i, j in zip(self.tv_more_title, self.tv_more_url):
            tv_dic_new[i] = j
        print(len(self.tv_more_title), self.tv_more_title)
        print(len(self.tv_more_url), self.tv_more_url)
        print(tv_dic_new)
        return tv_dic_new

    def url_change(self,url,flag):
        pa_url='http://www.iqiyi.com/a_[.+].html'
        if flag=="0":#通道1
            if re.match(pa_url, url):
                _url = url.replace('a', 'v')
            else:
                _url=url
            # new_url='http://www.wq114.org/weixin.php?url={}'.format(_url[21:])
            new_url='http://www.wq114.org/weixin.php?url={}'.format(_url)
            return new_url
        elif flag == "1":
            if re.match(pa_url, url):
                _url = url.replace('a', 'v')
            else:
                _url = url
            new_url='http://www.wmxz.wang/video.php?url={}'.format(_url)
            return new_url


    def play_movie(self,url,flag):
        play_url=self.url_change(url,flag)
        print('播放地址:',play_url)
        web = webdriver.Chrome()
        web.get(play_url)


if __name__ == '__main__':
    p=Pro()

相關推薦

基於tkinter+python36製作視訊播放非會員播放

首先附上2個播放地址,可以解析視訊網站,我只是個視訊搬運工,暫時未新增下載功能。 www.wq114.org/weixin.php?url= http://www.wmxz.wang/video.php?url= 兩個網站都可快速解析出視訊播放地址 上圖 t

基於emWin的WAVMP3軟解軟件播放帶類似千千靜聽頻譜含uCOS-III和FreeRTOS兩個版本

歌曲列表 span 事件 分享圖片 info 復制粘貼 說明 模態 界面 第9期:WAV,MP3軟解播放器,帶類似千千靜聽頻譜配套例子:V6-916_STemWin提高篇實驗_WAV,MP3軟解播放器,帶類似千千靜聽頻譜(uCOS-III)V6-917_STemWin提高篇

html中嵌入flvplayer.swf播放播放視訊

html中嵌入flvplayer.swf播放器,播放視訊 只需要改動紅色的程式碼: <object classid='clsid:D27CDB6E-AE6D-11cf-96B8-4445535411111' codebase='http://download.macromedia.co

Unity使用VideoPlayer在安卓上製作播放有畫面卡住的問題

出現的問題: 使用slider製作進度條來控制VideoPlayer播放視訊的進度,調整進度條值會出現畫面卡住,過了很久才會恢復的問題。 出現問題版本:Unity 2017.4.1f1 猜測的

22_Android中的本地音樂播放和網路音樂播放的編寫本地視訊播放和網路視訊播放照相機案例偷拍案例實現

1 編寫以下案例:當點選了”播放”之後,在手機上的/mnt/sdcard2/natural.mp3就會播放。2 編寫佈局檔案activity_main.xml<LinearLayout xmlns

基於android的網路音樂播放-回撥實現音樂播放及音樂收藏的實現(三)

作為android初學者,最近把瘋狂android講義和瘋狂Java講義看了一遍,看到書中介紹的知識點非常多,很難全部記住,為了更好的掌握基礎知識點,我將開發一個網路音樂播放器-EasyMusic來鞏固下,也當作是練練手。感興趣的朋友可以看看,有設計不足的地方也

關於頁面裡面巢狀視訊播放使用彈出層之後會被視訊擋住

<embed src="http://www.iqiyi.com/player/20140611102651/Player.swf?albumId=250686800&tvId=250686800&autoplay=true&cyclePlay=false&exclusi

javaCV開發詳解之4:轉流實現(作為本地收流、推流新增新增圖片及文字水印視訊影象幀儲存)實現rtsp/rtmp/本地檔案轉發到rtmp流媒體伺服器(基於javaCV-FFMPEG)

javaCV系列文章: 補充篇: 歡迎大家積極開心的加入討論群 javacpp-ffmpeg: 前言: 本章基於javaCV實現轉流器和收流器功能,測試採用監控rtsp地址轉發至rtmp伺服器地址 新增openCV儲存圖片功能。 補充:

安卓線上視訊播放視訊路徑為中文

最近在寫一個視訊APP,做播放器時發現伺服器中視訊路徑為中文還有很多“《”,“》”,“-”等等這樣的特殊符號,安卓播放器無法識別中文字元,所以就想著將路徑轉碼成UTF-8格式的。一般我們都會用到URL

Android------視訊播放(包含全屏播放快退快進騰訊新聞的列表播放等)

前段時間做了一個新聞APP,涉及到了列表視訊播放,和騰訊新聞APP差不多,總結了一下程式碼,寫了一個Demo來分享給大家。用了  TabLayout+RecylerView+自定義視訊控制元件  完成的 列表中支援全屏播放來看看效果圖:  列表類程式碼:public clas

iOS開發之仿微博視訊邊下邊播之自定義AVPlayer播放 邊下邊播解剖。視訊處理流程建立連線-請求資料-統籌資料-解碼資料-視訊呈現

Tips:這次的內容分為兩篇文章講述 01、[iOS]仿微博視訊邊下邊播之封裝播放器 講述如何封裝一個實現了邊下邊播並且快取的視訊播放器。 02、[iOS]仿微博視訊邊下邊播之滑動TableView自動播放 講述如何實現在tableView中滑動播放視訊,並且是流暢,不阻塞

aliplaye,rH5同層播放解決Android端wap視訊點選全屏問題

做直播專案時候在h5播放器方面遇到一些問題。 先說需求。主要是在微信瀏覽器開啟,上面是視訊播放視窗,下面是對話互動視窗,介面類似下圖 預想的是,上邊視訊可以小窗播放,下面可以傳送訊息。在ios系統是可以實現,但坑爹的是,在安卓上沒辦法實

頁面裡嵌入播放並獲取當前視訊播放總時間

<html><head><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><title>電子表單設計師(e-form Designer)使用手

推薦下:開源ckplayer 網頁播放 跨平臺(html5, mobile)flv, f4v, mp4, rtmp協議. webm, ogg, m3u8 !

網頁播放器 get ... 默認 control firefox ckplayer 原本 auto 視頻播放, 原本是想h5 自帶視頻播放,使用很簡單,結果現實很骨感。 <video controls="controls" preload="auto" height

工業串口觸摸屏開發制作mp3播放單片機或PLC通過串口控制播放MP3音頻方法

百分比 通訊 觸摸 參與 blog 設備 並行 周期 運行 工業串口觸摸屏開發制作mp3播放器,單片機或PLC通過串口控制播放MP3音頻方法 在工業控制系統中將音樂或語音MP3的美和工控結合在一起,給人以賞心悅目的感受。隨著工業控制的發展,對工業控制的控制要求也越來越高,使

零基礎讀懂視頻播放控制原理: ffplay 播放源代碼分析

5.4 編碼方式 是否播放 都對 enum 其中 mat 源碼 開始 https://www.qcloud.com/community/article/535574001486630869 視頻播放器原理其實大抵相同,都是對音視頻幀序列的控制。只是一些播放器在音視頻同步上可

基於Wi-Fi的HID註射利用WHID攻擊實驗

繼續 leon data- 設置 hsl password leonardo mode uart WHID 代表基於 Wi-Fi 的 HID 註射器,即對 HID 攻擊進行無線化攻擊的一種註入工具。 實驗攻擊原理如下圖: 攻擊者使用ESP8266作為AP,在自己的電腦

用javascript和html5做一個音樂播放附帶源碼

功能 優化 str 自由 所有 音樂app 作者 弧形 ner 效果圖: 實現的功能 1、首頁 2、底部播放控件 3、播放頁面 4、播放列表 5、排行榜 6、音樂搜索 輸入搜索關鍵詞,點擊放大鏡圖標 7、側邊欄 目錄結構 開發心得與總結 1、輪播圖 首

linux下最好用的視頻播放mplayersmplayer怎麽安裝 播放黑屏

安裝 linux下 依賴 smplayer 播放器 install yum命令 log 首選項 推薦一款linux環境下好用的視頻播放器 mplayer沒有圖形化界面 smplayer是mplayer的有圖形化界面的軟件 用yum命令安裝 yum install smpl

Android 音視頻深入 十三 OpenSL ES 制作音樂播放能暫停和調整音量(附源碼下載)

音視頻 OpenSL ES 項目地址https://github.com/979451341/OpenSLAudio OpenSL ES 是基於NDK也就是c語言的底層開發音頻的公開API,通過使用它能夠做到標準化, 高性能,低響應時間的音頻功能實現方法。 這次是使用OpenSL ES來做一個音樂播