获取 Bilibili 直播真实地址并使用 OPENCV 打开

获取 Bilibili 直播真实地址并使用 OPENCV 打开

使用的工具

  • selenium (一个Web自动化工具)
  • opencv-python
  • chromedriver

    难点: 获取地址

  • Bilibili 的直播页面没有直接给出视频流地址
  • 地址是通过 js 得到的
  • 这里可以通过使用 selenium + webdriver 来运行 js
  • 这里选择了 chromedriver 其它还有:
    • phantomjs
    • firefox

步骤

  • 设置 chromedriver 输出带有 Network Traffic 的 log
  • 直接使用 selenium + chromedriver 访问网页
  • 打开 log
  • 寻找视频流地址


代码实现:


导入库

1
2
3
4
5
6
import time
import re
import cv2
import numpy as np
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


获取真实地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
d_cap = DesiredCapabilities.CHROME  
d_cap['loggingPrefs'] = { 'performance':'ALL' }

def GetLiveURL(url, timeout = 30):
print("Starting Chrome...")
driver = webdriver.Chrome(desired_capabilities=d_cap)
print("Opening URL : %s"%url)
driver.get(url)
t_url_msg = None
trys = 0
while True:
print('Waiting...')
for i in driver.get_log('performance'):
if '.flv' in i['message']:
# print(i['message'])
t_url_msg = i['message']
break
if t_url_msg:
break
trys += 1
if trys == int(timeout/2):
print('Error: Timeout!')
break
time.sleep(2)
driver.close()
t_url = re.findall('https://(.*?)"', t_url_msg)
# print(t_url)
for i in t_url:
if '.flv' in i:
t_url = i
return 'https://' + t_url


使用 OpenCV 打开视频流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
url = 'http://live.bilibili.com/266'

t_url = GetLiveURL(url)

print('Find TRUE URL : %s'%t_url)
print('Opening Stream...')

cap = cv2.VideoCapture(t_url)

print('Start!')

# fil = np.eye(15)/15

while (cap.isOpened()):
ret, frame = cap.read()

# frame 为 Numpy 数组 可以进行一些变换

# gray = cv2.filter2D(frame,-1,fil) #cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# frame = np.concatenate((gray,frame), axis=1)

cv2.imshow('Conv_Test', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break

cap.release()
cv2.destroyAllWindows()

@Aeonni 写于2018.03.17

转载请注明出处

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×