由于工作需要,项目功能测试用到python调用vlc,用于播放一些直播流,各种尝试后终于可以了,其实蛮简单的,就是由于没有参考自己折腾挺浪费时间的,所以把结果贴出来给需要用到的人。

  准备工作:  

    1、首先python环境肯定得有;

    2、其次需要用到vlc的python-blindings,其实就是一个vlc.py文件,里边封装了很多常用api供调用(如果只要用系统调用的方式,这一步可以省略);

    3、需要下载一个和python位数相同的vlc播放器,32位或64位,要保证一致,否则又要各种折腾了;

  进入正题,如果要播放的流是很标准的,就是不包含类似“&”这种特殊字符的url,举个例子:浙江卫视[高清]:http://14.29.60.40/live/5/30/847a4e1e97584d39a961f5604e90c1c4.m3u8?type=web.cloudplay;像这种url你可以直接用system()系统调用的方式直接启动vlc.exe,并附加参数url便可播放;如果目的达到了那不用往下看了,否则,继续。

  很不幸我自己项目中要用的url是包含“&”的,这种url通过系统调用的方式将发生截断,效果就是“&”后面的东西被当做非法字段扔掉了,这样一来要测试的url肯定不对,经过各种尝试最终放弃system这种简单方式;选择用python-blindings,下载vlc.py之后各种尝试最终达到播放url的目的,这种情况下url是当做自定义函数的参数传进去的,可以避免被截断;以下贴出两种解决方案,区别是一个带字幕一个不带字幕;

import sys
import http.client
import time
from vlc import VideoMarqueeOption, Position, EventType,Instanceclass RTSP_Client():passclass VLC_Player():def __init__(self, url):self.url = urldef start_with_marquee(self,timeout=60):u"""这种方案是可以带字幕的,根据vlc自带测试源码改写"""movie = self.url# Need --sub-source=marq in order to use marquee belowprint(sys.argv[:])instance = Instance(["--sub-source=marq"] + sys.argv[1:])try:media = instance.media_new(movie)except (AttributeError, NameError) as e:sys.exit(1)player = instance.media_player_new()player.set_media(media)player.play()# Some marquee examples.  Marquee requires '--sub-source marq' in the# Instance() call above, see <http://www.videolan.org/doc/play-howto/en/ch04.html>player.video_set_marquee_int(VideoMarqueeOption.Enable, 1)player.video_set_marquee_int(VideoMarqueeOption.Size, 24)  # pixels
        player.video_set_marquee_int(VideoMarqueeOption.Position, Position.Bottom)player.video_set_marquee_int(VideoMarqueeOption.Timeout, 0)  # millisec, 0==foreverplayer.video_set_marquee_int(VideoMarqueeOption.Refresh, 1000)  # millisec (or sec?)##t = '$L / $D or $P at $T't = '%Y-%m-%d  %H:%M:%S'player.video_set_marquee_string(VideoMarqueeOption.Text, str_to_bytes(t))# Some event manager examples.  Note, the callback can be any Python# callable and does not need to be decorated.  Optionally, specify# any number of positional and/or keyword arguments to be passed# to the callback (in addition to the first one, an Event instance).event_manager = player.event_manager()event_manager.event_attach(EventType.MediaPlayerEndReached, end_callback)event_manager.event_attach(EventType.MediaPlayerPositionChanged, pos_callback, player)time.sleep(timeout)def start(self,timeout=60):u"""这种是最简方案,用来测试播放足够了"""instance = Instance()player = instance.media_player_new()Media = instance.media_new(self.url)Media.get_mrl()player.set_media(Media)player.play()#如果是看直播这里直接写while True 即可
        time.sleep(timeout)def str_to_bytes(s):"""Translate string or bytes to bytes."""if isinstance(s, str):return bytes(s, encoding="UTF-8")else:return sdef end_callback(event):print('End of media stream (event %s)' % event.type)sys.exit(0)echo_position = False
def pos_callback(event, player):if echo_position:sys.stdout.write('\r%s to %.2f%% (%.2f%%)' % (event.type,event.u.new_position * 100,player.get_position() * 100))sys.stdout.flush()if __name__ == "__main__":#测试url为浙江卫视直播流url = "http://14.29.60.40/live/5/30/847a4e1e97584d39a961f5604e90c1c4.m3u8?type=web.cloudplay"p = VLC_Player(url)p.start(6000)

  这种播放用的是vlc的动态链接库而不是vlc.exe可执行文件,所以GUI是最简的,想要实现播放暂停之类的可以自己实现。

  下面放出效果图:

  

  在python通过vlc相关api下播放流视频已经达成目的了;后续会继续写一下觉得有必要分享的随笔包括但不限于linux驱动、python、go、流媒体等。

转载于:https://www.cnblogs.com/zhangyi-studio/p/9164453.html

python_vlc 播放http流相关推荐

  1. H5Stream播放RTSP流视频

    H5Stream入门级应用,播放RTSP流视频 看到网上关于的H5Stream的资料比较少,故本文介绍了H5Stream的入门级使用教程,播放摄像头的RTSP视频流和和本地测试视频.包括H5Strea ...

  2. [html] H5的video可以播放哪些类型的文件?可以播放rtsp流吗?

    [html] H5的video可以播放哪些类型的文件?可以播放rtsp流吗? Ogg.MPEG4.WebM,不能播放rtsp 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定 ...

  3. vue中播放flv流视频

    1.安装环境 npm install video.js npm install flv.js 2.引入video,在main.js中引入 import videojs from "video ...

  4. 8K播放网络全终端播放器H5播放器网页直播/点播播放器EasyPlayer和vlc播放RTSP流地址不兼容问题排查解决

    背景介绍 EasyPlayer实现了对遵循标准流媒体码流协议进行实时播放以及码流录制,在流的播放速度以及画质的解码显示上均做了大量深度的优化.支持Windows(支持多窗口.包含ActiveX,npA ...

  5. ffmpeg 3.2版本播放ts流正常,但是录制成为MP4的文件播放黑屏

    终于把黑屏的问题解决了. 场景:用ffmpeg 3.2的库播放ts流或者m3u8文件正常,但是录制成为MP4文件的时候,只有声音,是黑屏的. 解决过程:Step1:采用ffmpeg 2.7进行ts流的 ...

  6. 基于libVLC的视频播放器之二:使用VLC-Qt播放RTSP流

    此篇是 使用VLC浏览器插件播放RTSP流的姊妹篇. 一.直接使用libVLC libVLC是VLC media player多媒体框架的核心引擎和接口,开发者使用它能轻松的创建大量具有VLC特性的应 ...

  7. 实现h5端播放rtsp流视频--通过ffmpeg转流实现

    实现h5端播放rtsp流视频–通过ffmpeg转流实现 安装包可通过官网下载,也可以评论邮箱发给你 #1. 安装 ffmpeg 解压 ffmpeg.zip 添加系统环境变量 cmd 输入 ffmpeg ...

  8. 使用html video播放http-flv流

    要使用 HTML video 播放 HTTP-FLV 流,您需要在 HTML 页面中使用 <video> 元素.您可以在其中使用 "src" 属性指定流的 URL,如下 ...

  9. VLC 如何播放SRT流

    VLC 可以播放SRT流,但是很多人拿到srt流的url直接丢到VLC中却发现播放失败,这里备注下如何使用VLC播放SRT流 假如srt播放url为 srt://域名:端口?streamid=#!:: ...

最新文章

  1. linux的网络地址配置,教你如何完成Linux网络地址配置
  2. 使用Angular 4、Bootstrap 4、TypeScript和ASP.NET Core开发的Apworks框架案例应用
  3. Linux 系统更改界面显示详解
  4. mysql+join的原理,Mysql连接join查询原理知识点
  5. FW:word/ppt中使用LaTEX语法输入公式!!!
  6. 如何提取仙剑奇侠传4的模型
  7. 概率论中经典概率模型
  8. 传新版支持光追的 MikuMikuDance 正由另一人研发——MikuMikuDance 2 Project
  9. reflections歌词翻译_英文歌曲reflection的歌词翻译
  10. 还在傻傻的数star、数fork吗?3秒钟教会你如何查看GitHub项目活跃度,是死是活一眼便知
  11. Linux下二维码生成工具:QRencode
  12. 怎样才能使呼叫中心创新变得更有价值
  13. arcgis 同名图层合并_【求助】ArcGIS中怎样合并图层 - 地学 - 小木虫 - 学术 科研 互动社区...
  14. 502 Bad Gateway 怎么解决?
  15. CGLIB介绍与原理
  16. 一个软件项目经理的心得和经验
  17. java 队列 抢购_使用Redis实现抢购的一种思路(list队列实现)
  18. 金蝶EAS BOS上如何打补丁
  19. 网络安全CTF夺旗赛入门到入狱-密码学下篇
  20. 浅谈UTON WALLET数字钱包及其安全性

热门文章

  1. 最近找到了一个免费的python教程,两周学会了python开发
  2. 修改注册表来修改IE的设置---资料汇总
  3. outlook客户端接收邮件报错0x80040600
  4. [转载] 七龙珠第一部——第009话 兔子头儿的绝招
  5. WCF之旅读书笔记(2):WCF如何通过Binding进行通信
  6. Linux Iptables 语法大全
  7. 什么是抽象类?抽象类的作用_Java面试题amp;和amp;amp;的作用和区别
  8. c++注释快捷键_是不是晚了点:Visual Studio可以自动生成注释啦!
  9. android真实项目教程(四)——MY APP MY STYLE_by_CJJ
  10. androidpn的学习研究(六)Androidpn-server的Mina编码和解码解析过程