无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)

我们在每天使用新闻的时候大都会以CCTV发布的新闻为准,我们的每天新闻收视率最高的还是我们的总台,大家闲来无事可能也会看一下央视网提供视频直播吧,看看还可以,但是我们可以发现我们完全解析不了,大家看一看便知道了

文章目录

  • 错误演示
  • 放大招
    • 硕鼠硕鼠,无食我黍
    • 硕鼠硕鼠,无食我麦
    • 硕鼠硕鼠,无食我苗
  • 开始爬取咯!
    • Windows的伙伴们
    • 其他操作系统的小伙伴
  • 完整代码
  • 转载声明

错误演示

打开CCTV直播,我们会看到当前直播的栏目无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第1张图片
我们可以通过抓包软件直接获取直播的地址
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第2张图片
这不是特别容易吗?一下就可以获取到我们的真实地址了呀!
WAIT,我们先去解析一下我们的代码

无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第3张图片
可是,当我们在PotPlayer里面打开之后发现,我们预期出现的画面并没有出来。那么这种情况肯定就是CCTV进行播放加密了。那我们该如何处理这种问题呢?
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第4张图片
我们先尝试着把这四个播放地址全部播放一遍,说不定可以呢?

名称 地址
index.m3u8 https://cctvcncw.v.wscdns.com/live/cctv1_1/index.m3u8?adapt=0&BR=pub
index.m3u8 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1/index.m3u8
cdrmcctv1_1_md.m3u8 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1_md.m3u8
cdrmcctv1_1_td.m3u8 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1_td.m3u8

我们一个一个尝试一下,尝试如下表所示

名称 地址 是否成功 显示页面
index.m3u8 https://cctvcncw.v.wscdns.com/live/cctv1_1/index.m3u8?adapt=0&BR=pub
index.m3u8 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1/index.m3u8
cdrmcctv1_1_md.m3u8 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1_md.m3u8
cdrmcctv1_1_td.m3u8 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1_td.m3u8

我们可以发现,第二个链接可以选择清晰度,而第三第四个链接则是选择清晰度之后的视频地址。
在这里插入图片描述
我们多次切换后发现,我们出现了几个清晰度不同的链接

清晰度 链接
流畅 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1_md.m3u8
标清 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1_hd.m3u8
高清 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1_ud.m3u8
超清 https://cctvtxyh5c.liveplay.myqcloud.com/live/cdrmcctv1_1_td.m3u8

可是这些都无法播放啊!!!!

放大招

硕鼠硕鼠,无食我黍

网上很多人都有各种不同的方法,之前我去一个非常著名的一个论坛就看到了我们如何去播放CCTV的直播,但是方法却十分狗血。 就是去寻找我们网上的一些大神所给我们的M3U8新地址,大多都是在阿里上的。虽然这些也能用,但是毕竟可能会有一种期限,我们不能保证它在任何时候都能够访问,失效了也说不定对吧?所以我们去下载CCTV的视频是最好的。

硕鼠硕鼠,无食我麦

现在就给大家推荐一个解析网站,当然它不提供存储,仅仅是解析罢了无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第5张图片
我们可以看到的是,我们已经打开了我们的网页了,然后我们直接输入这样的网址https://tv.cctv.com/live/cctv10/,点击开始我们可以看到这样的界面
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第6张图片
点击最新的日期,我们会看到这样的东西
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第7张图片
我们再随便点击一个试一下,就会发现这样的链接
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第8张图片
原来这就是最后的链接,原来这就是最终的东西
于是我们将这个东西发到我们的地址栏中进行测试,没想到真的成功了呀!
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第9张图片
于是我们再次看一下我们的视频,都是五分钟的视频,那么也就说我们一个小时之中就有十二个小片段,那么这样子我们就可以开展爬取了。
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第10张图片

硕鼠硕鼠,无食我苗

那我们就开始咯,我们再来看一看这里边的延迟,我现在的时间是九点十三分
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第11张图片
那么如果这样算的话,我们的视频应该是在002这样的节点上

无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第12张图片
果然证明我们的猜想,这是可以播放的。那么我们再试一试003呢?
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第13张图片
由于我现在本地时间已经到十七分了,所以我们尝试004,发现果然无法访问,那么就是说我们可能会有十分钟的延迟

开始爬取咯!

现在我们就开始爬取了,我们首先就是要获取本地的时间
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第14张图片

然后我们开始要我们在分钟的片段上面进行研究,于是就可以写出这样的IF语句,我们为了各种情况都做出了充足的准备!
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第15张图片
我们这个时候打印以下这个self.section_all这个对象,如果可以出现当时候的数字编码的话就证明我们逻辑成功了
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第16张图片

import time

# 定义一个StreamIng类
class StreamIng():
	def __init__(self,num):
		self.num = num
		# 开始运行程序
		self.get_local_time()

	def get_local_time(self):
		# 获取转换后的时间戳
		localtime = time.localtime()
		# print(localtime)

		# 获取现在的年,月,日,小时,分钟
		self.year = time.strftime("%Y",localtime)
		self.month = time.strftime("%m",localtime)
		self.day = time.strftime("%d",localtime)
		self.hour = time.strftime("%H",localtime)
		self.minute = time.strftime("%M",localtime)

		# 获取分段的片段
		section = int(int(self.minute) / 5)
		# print(section)

		# 如果当时间不超过05分时,播放上一时刻视频
		if section == 0:
			self.hour = int(self.hour)-1
			self.section_all = "012"
		# 如果时间不超过50分,播放本时刻00段视频
		elif section < 10:
			self.section_all = "00"+ str(section)
		# 播放0段视频
		else:
			self.section_all = "0"+ str(section)

		print(self.section_all)

StreamIng(10)

Windows的伙伴们

接下来我们就要来使用FFplay来播放视频了,逻辑十分简单。首先我们先要下载FFplay这个模块,大家可以直接到FFmpeg官网下载,也可以使用我在这里提供给大家的直接解压使用的,点击下载

无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第17张图片

然后将我们的FFpay这个放在和代码文件同一目录当中

def play_stream_video(self):
		path = 'http://cntv.vod.cdn.myqcloud.com/flash/live_back/nettv_cctv'+str(self.num)+"/cctv"+str(self.num)+"-"+str(self.year)+"-"+str(self.month)+"-"+str(self.day)+"-"+str(self.hour)+"-"+str(self.section_all)+".mp4"
		print(path)

		# 使用FFplay播放视频
		os.popen("ffplay -i "+path)

这是我们拼接视频的代码,然后我们直接使用FFplay进行播放
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第18张图片

于是我们就可以播放了


我们接下来就是要开始进行直播的逻辑分析了,我们现在的想法是播放完一个视频,然后立马去播放下一个视频。这是我们的一个思路,但是我们该如何实现呢?
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第19张图片

我们设置播放完成后立马关闭窗口并且设置我们窗口的标题
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第20张图片

我们再来一个循环,这是一个无限循环,循环的时间是5分钟那么也就是300秒

import time
import os
import requests

# 定义一个StreamIng类
class StreamIng():
	def __init__(self,num):
		self.num = num
		# 开始运行程序
		self.get_local_time()

	def get_local_time(self):
		# 获取转换后的时间戳
		localtime = time.localtime()
		# print(localtime)

		# 获取现在的年,月,日,小时,分钟
		self.year = time.strftime("%Y",localtime)
		self.month = time.strftime("%m",localtime)
		self.day = time.strftime("%d",localtime)
		self.hour = time.strftime("%H",localtime)
		self.minute = time.strftime("%M",localtime)

		# 获取分段的片段
		section = int(int(self.minute) / 5)
		# print(section)

		# 如果当时间不超过05分时,播放上一时刻视频
		if section == 0:
			self.hour = int(self.hour)-1
			self.section_all = "012"
		# 如果时间不超过50分,播放本时刻00段视频
		elif section < 10:
			self.section_all = "00"+ str(section)
		# 播放0段视频
		else:
			self.section_all = "0"+ str(section)

		# print(self.section_all)


		self.play_stream_video()


	def play_stream_video(self):
		self.path = 'http://cntv.vod.cdn.myqcloud.com/flash/live_back/nettv_cctv'+str(self.num)+"/cctv"+str(self.num)+"-"+str(self.year)+"-"+str(self.month)+"-"+str(self.day)+"-"+str(self.hour)+"-"+str(self.section_all)+".mp4"
		# print(path)

		# -window_title : 设置窗口标题
		self.window_title = "CCTV"+str(self.num)+"直播播放"+str(self.hour)+str(self.section_all)+".mp4"
		# -autoexit : 播放完成后自动退出

		# 使用FFplay播放视频
		os.popen("ffplay "+" -window_title "+self.window_title+" -autoexit "+self.path)

	

if __name__ == '__main__':
	while True:
		StreamIng(10)
		time.sleep(300)
			

我们的程序就大致完工了,这是不是很好呢?

其他操作系统的小伙伴

这个我还真不知道怎么弄,主要是我本地也没有这样的环境,没有时间去操作,所以这就只能是遗憾了。我在这里呢就介绍一下下载的代码,其实很简单
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第21张图片
我们获取地址,然后我们再获取,然后再写入文件,那么就成功了

完整代码

import time
import os
import requests

# 定义一个StreamIng类
class StreamIng():
	def __init__(self,num):
		self.num = num
		# 开始运行程序
		self.get_local_time()

	def get_local_time(self):
		# 获取转换后的时间戳
		localtime = time.localtime()
		# print(localtime)

		# 获取现在的年,月,日,小时,分钟
		self.year = time.strftime("%Y",localtime)
		self.month = time.strftime("%m",localtime)
		self.day = time.strftime("%d",localtime)
		self.hour = time.strftime("%H",localtime)
		self.minute = time.strftime("%M",localtime)

		# 获取分段的片段
		section = int(int(self.minute) / 5)
		# print(section)

		# 如果当时间不超过05分时,播放上一时刻视频
		if section == 0:
			self.hour = int(self.hour)-1
			self.section_all = "012"
		# 如果时间不超过50分,播放本时刻00段视频
		elif section < 10:
			self.section_all = "00"+ str(section)
		# 播放0段视频
		else:
			self.section_all = "0"+ str(section)

		# print(self.section_all)

		self.play_stream_video()

	def play_stream_video(self):
		self.path = 'http://cntv.vod.cdn.myqcloud.com/flash/live_back/nettv_cctv'+str(self.num)+"/cctv"+str(self.num)+"-"+str(self.year)+"-"+str(self.month)+"-"+str(self.day)+"-"+str(self.hour)+"-"+str(self.section_all)+".mp4"
		# print(path)

		# -window_title : 设置窗口标题
		self.window_title = "CCTV"+str(self.num)+"直播播放"+str(self.hour)+str(self.section_all)+".mp4"
		# -autoexit : 播放完成后自动退出

		# 使用FFplay播放视频
		os.popen("ffplay "+" -window_title "+self.window_title+" -autoexit "+self.path)

		self.download_video()

	def download_video(self):
		video = requests.get(self.path)

		with open("./"+self.window_title,"wb+")as video_write:
			video_write.write(video.content)
			video_write.close()

if __name__ == '__main__':
	while True:
		StreamIng(10)
		time.sleep(300)	


如果播放有问题,那么我们就直接下载
无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)_第22张图片
这样我们解析CCTV的直播就OK了

转载声明

博客在2021年5月16日首发自CSDN,如需转载,请附上原文链接:无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)

你可能感兴趣的:(python,ffplay,ffmpeg,cctv,视频)